0
Dictionary<objectx,objecty> d.

LINQを使用して、「d」で最も多く出現するオブジェクトyを選択したいと思います。

d.GroupBy(t => t.Value) 

から値を取得できないという結果が出ました。

ありがとう

4

4 に答える 4

2
objecty maxOccurenceValue = d.GroupBy(kv => kv.Value)
                     .OrderByDescending(g => g.Count())
                     .First().Key;

オブジェクトはをオーバーライドまたは実装する必要があることに注意しEqualsGetHashCodeくださいIEqualityComparer<T>

于 2012-07-18T13:26:55.857 に答える
1

あなたは途中です。グループができたので、 MoreLinqMaxByのメソッドを使用して、カウントが最も高い値を特定できます。

var highestFrequencyValue = d
    .GroupBy(t => t.Value)
    .MaxBy(g => g.Count())
    .Key;

MaxByの実装は、これを自分で達成する方法についての洞察を提供します(著作権/ライセンスを確認するようにしてください)。

于 2012-07-18T13:24:21.233 に答える
0

あるいは、どれが最も発生するか(そしてどのキーが持っているかではない)だけを本当に気にする場合は、それがaであることを無視してDictionary、のリストにのみ作用しValueます。

Dictionary<string, int> dict = new Dictionary<string, int>
{
    {"hi", 3},
    {"there", 3},
    {"you", 4},
    {"have", 5},
    {"a", 5},
    {"nice", 5},
    {"hat", 5},
    {"and", 6}, 
    {"shoes", 6},
};

var result = dict
    .Select(d => d.Value)
    .GroupBy(k => k)
    .OrderByDescending(k => k.Count())
    .First()
    .Key;

Console.WriteLine(result);

// 5

編集:私は2番目の変換を使用しないのが好きです。ありがとう、@Tim。私を変更し、彼の投稿にもうないものへの参照を削除しました。

于 2012-07-18T13:53:47.237 に答える
0
List<Order> orders=new List<Order>
            {new Order(){State="cali",ID=1},
            new Order(){State="cali",ID=2},
            new Order(){State="nali",ID=3},
            new Order(){State="pali",ID=4},
            new Order(){State="pali",ID=5},
            new Order(){State="cali",ID=3},
        };
        List<Order> gr=null;
        orders.GroupBy(g => g.State).ToList().ForEach(d=>
        {
            if(gr==null)
                gr = d.ToList<Order>();
            else if (gr.Count() < d.Count())
                gr = d.ToList<Order>();

        });
        return gr;

はい、OrderByでそれを行うことができますが、リストに多くの要素がある場合、OrderByは非常に拡張された関数だと思います。これが役立つことを願っています。

于 2012-07-18T14:03:24.500 に答える