簡體   English   中英

如何遍歷字典<string, object>使用 C#

[英]How to iterate through Dictionary<string, object> using c#

我有一個

Dictionary<string, List<string>> demo = new Dictionary<string, List<string>>();

List<String> key1val= new List<string>();
key1val.Add("1");
key1val.Add("2");
key1val.Add("3");

List<String> key2val= new List<string>();
key2val.Add("4");
key2val.Add("5");

demo.Add("key1", key1val);
demo.Add("key2", key2val);

foreach (var item in demo)
{
    foreach(var it in item.Value)
    {
        Console.WriteLine(it);
    }
}

我想遍歷所有鍵,如key1,key2

如果當前項是key1則內部循環應該獲取關於key1所有值並將其迭代到第二個循環中

loop
iterate though key1
iterate though [1,2,3] 

loop
iterate though key2
iterate though [4,5] 

好吧,使用 2 個嵌套循環。

外層迭代鍵,內層迭代相應條目的值:

Dictionary<string, List<string>> demo = new Dictionary<string, List<string>>();

List<String> key1val= new List<string>();
key1val.Add("1");
key1val.Add("2");
key1val.Add("3");

List<String> key2val= new List<string>();
key2val.Add("4");
key2val.Add("5");

demo.Add("key1", key1val);
demo.Add("key2", key2val);

foreach (var key in demo.Keys)
{
    Console.WriteLine(key);
    foreach (var elem in demo[key])
    {
        Console.WriteLine(elem);
    }
}

這輸出

key1
1
2
3
key2
4
5

使用 LINQ SelectMany將值累積到一個列表中:

foreach (string value in demo.SelectMany(kvp => kvp.Value))
{
    Console.WriteLine(val);
}

LINQ的解決方案包括Concat結合KeyValues到一個單一的收集和SelectMany拉平他們:

Dictionary<string, List<string>> demo = ...

var result = demo
  .SelectMany(pair => new string[] { pair.Key }.Concat(pair.Value));  

// Let's have a look
foreach (var item in result)
  Console.WriteLine(item);
foreach (var item in demo )
{
   WriteLine("loop");
   WriteLine($"iterate though {item.key}");
   WriteLine($"iterate though {item.Value}");
   WriteLine();
}

這應該輸出你想要的但是,你可以:

foreach (var item in demo )
{
   WriteLine("loop");
   WriteLine($"iterate though {item.key}");
   if (item.Value is IEnumerable<string> val) foreach(var v in val) WriteLine(v);
   WriteLine();
}
foreach (var item in demo)
{
    Console.WriteLine("loop");
    Console.WriteLine($"iterate though {item.Key}");
    var valueAsString = $"[{String.Join(",", item.Value)}]";
    Console.WriteLine($"iterate though {valueAsString}");
}

輸出:

loop
iterate though key1
iterate though [1,2,3]

loop
iterate though key2
iterate though [4,5]

您可以測試: https : //dotnetfiddle.net/REqIdD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM