C#でLinqを使用して、配列内の要素の大部分を見つける方法はありますか?もう少し複雑にするために、過半数がない場合は、最初の要素を使用する必要があります。
したがって、たとえば配列["A", "B", "B"]
の場合、ステートメントはに評価される必要があり"B"
ます。また、配列を使用["A", "B", "C"]
すると、ステートメントはに評価され"A"
ます。
これを行うには他に100の方法があると確信していますが、Linqソリューションがあるかどうか興味があります。
var majority = array.GroupBy(x => x)
.MaxBy(g => g.Count())
.Key;
ここではMaxBy
、拡張メソッドとして定義できる(バージョンへのリンクをたどりますが、アイデアは単純です)を使用しています。
string majority = yourArray.GroupBy(x => x)
.OrderByDescending(g => g.Count())
.First()
.Key;
オンラインで動作することを確認してください:ideone
var strings = new List<string>{"A", "B", "B"};
var mostCommonOrFirst = strings
.GroupBy(s => s)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.First();