我正在研究C#转换字典以进行查询:
public class myClass
{
public int my_id;
public Dictionary<string, Dictionary<string, string[]>> myDict;
}
Dictionary<string, myClass> dataDict;
var queryDict = (from happen in dataDict
group happen by happen.Value.my_id into g select g)
.ToDictionary(g => g.Key, g => g.ToDictionary(x => x.Key, x => x.Value));
我需要迭代queryDict的每个元素。
在进行查询之前,对于相同的dataDict密钥,可能有多个myClass具有相同的event_id。
查询后,对于相同的happen.Value.my_id,dataDict的原始密钥是如何组织的?它们是一个event_id指向的列表?
任何帮助将不胜感激!
答案 0 :(得分:1)
基本上group by
为您提供了IGrouping<TKey, TElement>
IEnumerable<TElement>
(IGrouping Interface),因此有这样的疑问:
from happen in dataDict group happen by happen.Value.my_id into g select g
表示您按happen.Value.my_id
分组,因此TKey
将为my_id
而TElement
将为KeyValuePair<string, MyClass>>
,这是您字典中的项目。由于上述查询结果的IGrouping<int, KeyValuePait<stirng, MyClass>>
实际上是IEnumerable<keyValuePair<string, MyClass>>
,因此对于每个密钥,您实际上都有IEnumerable<KeyValuePair<string, MyClass>>
。正如您在此处所看到的,您拥有字典的元素。
查询的第二部分只是将IEnumerable<IGrouping<int, Dictionary<string, MyClass>>>
转换为Dictionary<int, Dictionary<string, MyClass>>>
,所以这并不重要。
答案 1 :(得分:1)
实际上,您的dataDict是KeyValuePair
(1维数组)的数组。并且您的查询会添加另一个维度,因此它变为Dictionary
Dictionaries
。但添加另一个维度只是一个新密钥组合的旧元素。
最好这样说明一下: