C# 从dictionaryC获取唯一值

C# 从dictionaryC获取唯一值,c#,dictionary,C#,Dictionary,我有一本字典,里面有这种形式的数据 key , value 1 , 1 0 1 1 1 1 2 , 1 2 3 4 5 6 3 , 1 0 1 1 1 1 and so on. 我想在其他字典中获得IList的唯一值以及新键。 有谁能帮我继续做这件事。我不知道有没有比这更好的方法: var dict = new Dictionary<string, IList<int>>(); var uniques =

我有一本字典,里面有这种形式的数据

key ,  value
1   ,  1 0 1
       1 1 1

2   , 1 2 3
      4 5 6

3   , 1 0 1
      1 1 1 

 and so on.
我想在其他字典中获得IList的唯一值以及新键。
有谁能帮我继续做这件事。

我不知道有没有比这更好的方法:

var dict = new Dictionary<string, IList<int>>();

var uniques = new Dictionary<string, IList<int>>();

foreach (var kvp in dict)
{
    if(!uniques.Any(val => val.Value.SequenceEqual(kvp.Value)))
        uniques.Add(kvp.Key, kvp.Value);
}

将您的值作为HashSet而不是IList处理如何。然后,您将能够使用相等比较器CreateSetComparer按值对词典进行分组

  var dictionary = new Dictionary<string, IList<Object>>
                    {
                        {"1", new List<object> {1, 0, 1, 1, 1, 1}},
                        {"2", new List<object> {1, 2, 3, 4, 5, 6}},
                        {"3", new List<object> {1, 0, 1, 1, 1, 1}}
                    };
    var dictionaryHashSets = dictionary.ToDictionary(k=>k.Key, v=> new HashSet<Object>(v.Value));
    var reverseDictionary = dictionaryHashSets.GroupBy(pair => pair.Value, HashSet<Object>.CreateSetComparer()).ToDictionary(gk => gk.Key, gv => gv.Select(pair => pair.Key));

在您的示例中,每个列表都是唯一的,您的意思是什么?新密钥应该从哪里生成?如果您显示预期的输出,我们可能会提供帮助。由于似乎不会进行进一步编辑,我将不得不投票反对您的问题,直到您改进它。如果你让它不那么模棱两可,我会很高兴地撤销我的操作。如果你列举一个通用字典,它会产生一个KeyValuePair的序列,所以列表是一个误导性的变量名来表示该类型,依我看。谢谢Dave,这对我的情况来说似乎工作得很好。