【发布时间】:2010-10-19 11:28:54
【问题描述】:
如何循环具有特定键的字典值?
foreach(somedictionary<"thiskey", x>...?
/M
【问题讨论】:
-
一个字典只有有每个键有一个值,所以不需要foreach...
-
你可以看看这个答案dictionary values in a foreach loop,以防你需要遍历键。
标签: c#
如何循环具有特定键的字典值?
foreach(somedictionary<"thiskey", x>...?
/M
【问题讨论】:
标签: c#
字典每个键只有一个有一个值,所以不需要foreach...你可能只检查它是否是那里(ContainsKey 或 TryGetValue):
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<TKey,TValue>) 每个键有多个值,只是:
foreach(var value in somedictionary["thisKey"]) {
Console.WriteLine(value);
}
【讨论】:
给定键最多有一个值,因此foreach 没有任何作用。也许您正在考虑某种多地图概念。不知道.Net类库中是否存在这样的东西。
【讨论】:
ILookup<TKey,TValue>,最常见的是来自Enumerable.ToLookup的具体Lookup<TKey,TValue>
此扩展方法可能有助于遍历字典:
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);
}
【讨论】:
假设你有一个这样声明的字典:var d = new Dictionary<string, List<string>>();。您可以像这样遍历给定键的列表值:
foreach(var s in d["yourkey"])
//Do something
【讨论】: