以下是简单的方法:
public static Dictionary<DicKeyCla, DicValCla>
FindDict(List<Dictionary<DicKeyCla, DicValCla>> haystack,
DicKeyCla needle)
{
foreach (Dictionary<DicKeyCla, DicValCla> dict in haystack)
if (dict.ContainsKey(needle))
return dict;
return null;
}
给定一个字典列表和一个键,它将返回第一个具有该键的字典,如果列表中没有,则返回 null。
或更笼统地说:
public static IDictionary<TKey, TValue>
FindDict<TKey, TValue>(IEnumerable<IDictionary<TKey, TValue>> haystack,
TKey needle)
{
foreach (IDictionary<TKey, TValue> dict in haystack)
if (dict.ContainsKey(needle))
return dict;
return null;
}
如果您需要经常进行此查找或列表很长,您可能需要使用Dictionary<DicKeyCla, Dictionary<DicKeyCla, DicValCla>> 来索引您的键,该Dictionary<DicKeyCla, Dictionary<DicKeyCla, DicValCla>> 包含哪个字典包含哪个键。如果多个字典可以包含相同的键,那么您将需要一个 Dictionary<DicKeyCla, List<Dictionary<DicKeyCla, DicValCla>>> 来存储您的索引。
如果您已经有了列表并想创建索引,您可以这样做:
Dictionary<DicKeyCla, Dictionary<DicKeyCla, DicValCla>> index =
new Dictionary<DicKeyCla, Dictionary<DicKeyCla, DicValCla>>();
foreach (Dictionary<DicKeyCla, DicValCla> dict in list)
foreach (KeyValuePair<DicKeyCla, DicValCla> item in dict)
index[item.Key] = dict;
// or in LINQ
Dictionary<DicKeyCla, Dictionary<DicKeyCla, DicValCla>> index =
(from dict in list
from item in dict
select new { item.Key, dict })
.ToDictionary(e => e.Key, e => e.dict);
以下是您如何使用索引:
public static Dictionary<DicKeyCla, DicValCla>
FindDict(Dictionary<DicKeyCla, Dictionary<DicKeyCla, DicValCla>> index,
DicKeyCla needle)
{
Dictionary<DicKeyCla, DicValCla> result;
index.TryGetValue(needle, out result);
return result;
}