【问题标题】:foreach with key in dictionaryforeach 与字典中的键
【发布时间】:2010-10-19 11:28:54
【问题描述】:

如何循环具有特定键的字典值?

foreach(somedictionary<"thiskey", x>...?

/M

【问题讨论】:

标签: c#


【解决方案1】:

字典每个键只有一个一个值,所以不需要foreach...你可能只检查它是否是那里(ContainsKeyTryGetValue):

SomeType value;
if(somedictionary.TryGetValue("thisKey", out value)) {
    Console.WriteLine(value);
}

如果SomeType 实际上是一个列表,那么你当然可以这样做:

List<SomeOtherType> list;
if(somedictionary.TryGetValue("thisKey", out list)) {
    foreach(value in list) {
        Console.WriteLine(value);
    }
}

查找 (ILookup&lt;TKey,TValue&gt;) 每个键有多个值,只是:

foreach(var value in somedictionary["thisKey"]) {
    Console.WriteLine(value);
}

【讨论】:

    【解决方案2】:

    给定键最多有一个值,因此foreach 没有任何作用。也许您正在考虑某种多地图概念。不知道.Net类库中是否存在这样的东西。

    【讨论】:

    • multimap = ILookup&lt;TKey,TValue&gt;,最常见的是来自Enumerable.ToLookup的具体Lookup&lt;TKey,TValue&gt;
    • 我应该在某些列表上使用 linq 吗?
    • 但是值可以是一个列表。
    • @klausbyskov:那么您将只是遍历一个列表,而它来自字典这一事实将相当无趣。
    • 真真真假,但你永远不会知道这些问题。
    【解决方案3】:

    此扩展方法可能有助于遍历字典:

    public static void ForEach<TKey, TValue>(this Dictionary<TKey, TValue> source, Action<KeyValuePair<TKey, TValue>> action) {
       foreach (KeyValuePair<TKey, TValue> item in source)
          action(item);
    }
    

    【讨论】:

      【解决方案4】:

      假设你有一个这样声明的字典:var d = new Dictionary&lt;string, List&lt;string&gt;&gt;();。您可以像这样遍历给定键的列表值:

      foreach(var s in d["yourkey"])
          //Do something
      

      【讨论】:

        猜你喜欢
        • 2011-07-02
        • 2022-11-15
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 2019-11-22
        • 2012-03-11
        • 2020-01-22
        • 2022-01-25
        相关资源
        最近更新 更多