反复进行
在C#中,IDictionary< TKey,TValue>实现IEnumerable< KeyValuePair< TKey,TValue>>.因此,您可以遍历类型为IDictionary< TKey,TValue>的实例.使用foreach或Linq查询,并获取数据结构中的每个KeyValuePair.由于在这种情况下TValue本身就是IDictionary,因此您也可以在内部结构上执行此操作:
foreach(var kvp in myDictionary)
{
foreach(var innerKvp in kvp.Value)
{
var myValue = innerKvp.Value
//Logic on myValue
}
}
使用Linq库,可以使用SelectMany非常优雅地获取所有KeyValuePair实例:
myDictionary.SelectMany(kvp => kvp.Value);
SelectMany本质上是使列表列表变平.这个Linq查询说:对于字典中的每个键值对,获取所有内部字典,将它们视为键值对列表,然后将所有这些列表展平.这将返回IEnumerable< KeyValuePair< TKey,TValue>>.
相反,如果您只关心内部字典的值而不关心键,则可以使用IDictionary< TKey,TValue>上的Values属性.返回IEnumerable< TValue>.字典中所有值的然后,我们可以使用SelectMany来获取包含字典词典中所有值的列表:
myDictionary.Values.SelectMany(dict => dict.Values);