0

次のような辞書オブジェクトがあります。

CustomKeys<int, string>

例えば;

1000, F1
1001, F2
1002, F1
1003, F4
1004, F2

この辞書に同じ値が複数あるかどうかを知りたいです。また、どのキー (一意の ID) が重複しているかをメモしておきたいと思います。

それは可能ですか?

4

4 に答える 4

4

GroupByand thanを使用しCount() > 1て、重複する値を追跡することができます。

var q = dic.GroupBy(x => x.Value)
        .Select (x => new { Item = x, HasDuplicates = x.Count() > 1 });
于 2013-01-21T18:30:17.590 に答える
3

このように同じ値を持つすべてのキー値を見つけることができます。

    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しかし、あなたのアイテムが同じ価値を持っているのであなたが価値を得たいならば、素晴らしいマグナスの答えを見てください。

于 2013-01-21T18:29:50.010 に答える
1

「値が重複していることをメモしておく」とはどういう意味かわかりません。キーをメモしておくことを意味する場合は、次のようにすることができます。

        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 の回答を参照してください。

于 2013-01-21T18:55:49.137 に答える
1

別の解決策は次のとおりです。

var duplicates = dictionary.GroupBy( g => g.Value )
                           .Where( x => x.Count( ) > 1 )
                           .Select( x => new { Item = x.First( ), Count = x.Count( ) } )
                           .ToList( );
于 2013-01-21T19:00:13.207 に答える