我有一个这样的字典对象:
CustomKeys<int, string>
例如;
1000, F1
1001, F2
1002, F1
1003, F4
1004, F2
我想知道这本字典中是否有超过 1 个相同的值。我还想记下哪些键(唯一 ID)有重复项。
那可能吗?
我有一个这样的字典对象:
CustomKeys<int, string>
例如;
1000, F1
1001, F2
1002, F1
1003, F4
1004, F2
我想知道这本字典中是否有超过 1 个相同的值。我还想记下哪些键(唯一 ID)有重复项。
那可能吗?
可以使用GroupByand thanCount() > 1来跟踪哪些值具有重复项。
var q = dic.GroupBy(x => x.Value)
        .Select (x => new { Item = x, HasDuplicates = x.Count() > 1 });
    您可以找到它们具有相同值的所有键值,如下所示;
    Dictionary<int, string> d = new Dictionary<int, string>();
    d.Add(1000, "F1");
    d.Add(1001, "F2");
    d.Add(1002, "F1");
    d.Add(1003, "F4");
    d.Add(1004, "F2");
    var dublicate = d.ToLookup(x => x.Value, x => x.Key).Where(x => x.Count() > 1);
    foreach (var i in dublicate)
    {
        Console.WriteLine(i.Key);
    }
这是一个DEMO.
但是,如果您想获得一个boolean价值,因为您的物品具有相同的价值,请查看Magnus 的答案,这很棒。
另一种解决方案可能是:
var duplicates = dictionary.GroupBy( g => g.Value )
                           .Where( x => x.Count( ) > 1 )
                           .Select( x => new { Item = x.First( ), Count = x.Count( ) } )
                           .ToList( );
    我不确定您所说的“记下哪些具有重复值”是什么意思。如果你的意思是记下键,你可以这样做:
        var keys = new Dictionary<int, string>();
        keys.Add(1000, "F1");
        keys.Add(1001, "F2");
        keys.Add(1002, "F1");
        keys.Add(1003, "F4");
        keys.Add(1004, "F2");
        var duplicates = keys.GroupBy(i => i.Value).Select(i => new
        {
            keys = i.Select(x => x.Key),
            value = i.Key,
            count = i.Count()
        });
        foreach (var duplicate in duplicates)
        {
            Console.WriteLine("Value: {0} Count: {1}", duplicate.value, duplicate.count);
            foreach (var key in duplicate.keys)
            {
                Console.WriteLine(" - {0}", key);
            }
        }
如果您的意思是仅跟踪重复值,请参阅 Sonor 的答案。