如何获取所有父词典值的所有子词典元素的不同键

时间:2015-02-17 05:26:31

标签: c# dictionary

我有这样的字典......     Dictionary<string, Dictionary<string, double>>

如何从所有父词典值的所有词典中获取所有Distinctunique子词典键的列表(父词典值只是子词典)?

这是在C#中执行此操作的最快方法吗?

4 个答案:

答案 0 :(得分:1)

然后,您需要在字典的SelectMany()属性上调用Values,然后使用Distinct()通过使用默认的相等比较器从序列中获取不同的元素。

 var res = myDict.Values.SelectMany(x => x.Keys).Distinct().ToList();

答案 1 :(得分:1)

使用LINQ非常简单:

var result = myDict.Values.SelectMany(x => x.Keys)
                          .Concat(myDict.Keys)
                          .Distinct()
                          .ToList();

但即使没有LINQ,使用HashSet<string>时也非常容易:

var set = new HashSet<string>();

foreach(var outerItem in myDict)
{
    set.Add(outerItem.Key);
    foreach(var innerKey in item.Value.Keys)
    {
        set.Add(innerKey);
    }
}

HashSet<T>只保留不同的项目,因此两次添加相同的字符串不会有任何区别。

PS。下次你应该先尝试编写代码,并在遇到问题时提出问题,你不能自己克服。 Stack Overflow不是'我想要代码,给我代码'那种网站。

答案 2 :(得分:0)

此代码使用字符串键和双值创建一个Dictionary。

    Dictionary<string, double> d = new Dictionary<string, double>()
    {           
    };
    // Store keys in a List
    List<string> list = new List<string>(d.Keys);
    // Loop through list
    foreach (string k in list)
    {
        //From here you can choose distinct key  
    }

答案 3 :(得分:0)

如果我正确读这个:

IEnumerable<string> uniqueChildKeys = dictOfDicts
   .SelectMany(d => d.Value.Keys)
   .Distinct();
相关问题