Dictionary<objectx,objecty> d.
LINQを使用して、「d」で最も多く出現するオブジェクトyを選択したいと思います。
d.GroupBy(t => t.Value)
から値を取得できないという結果が出ました。
ありがとう
objecty maxOccurenceValue = d.GroupBy(kv => kv.Value)
.OrderByDescending(g => g.Count())
.First().Key;
オブジェクトはをオーバーライドまたは実装する必要があることに注意しEquals
てGetHashCode
くださいIEqualityComparer<T>
。
あるいは、どれが最も発生するか(そしてどのキーが持っているかではない)だけを本当に気にする場合は、それが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。私を変更し、彼の投稿にもうないものへの参照を削除しました。
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は非常に拡張された関数だと思います。これが役立つことを願っています。