配列内の大半の要素を見つけるには、LinqをC#で使用する方法はありますか?もう少し複雑にするために、大多数がない場合は、最初の要素を取る必要があります。LINQを使用しているstring []の多数決?
たとえば、配列["A", "B", "B"]
の場合、ステートメントは"B"
と評価されます。 配列["A", "B", "C"]
の場合、ステートメントは"A"
と評価されます。
これを行うには他に100の方法があると思いますが、Linqソリューションがあるかどうか不思議です。
配列内の大半の要素を見つけるには、LinqをC#で使用する方法はありますか?もう少し複雑にするために、大多数がない場合は、最初の要素を取る必要があります。LINQを使用しているstring []の多数決?
たとえば、配列["A", "B", "B"]
の場合、ステートメントは"B"
と評価されます。 配列["A", "B", "C"]
の場合、ステートメントは"A"
と評価されます。
これを行うには他に100の方法があると思いますが、Linqソリューションがあるかどうか不思議です。
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();
これは 'O(n log n)'です。あなたはより良いことができます(並べ替えを避ける)。 – jason
大部分がない場合(すべてが等しい)、私は 'OrderByDescending'が元のリストから最初の項目を返すことは保証されていないと思います。 – Magnus
@Magnus:どうしてそんなことを考えますか? [docs](http://msdn.microsoft.com/en-us/library/bb534855.aspx)から: "このメソッドは、安定した並べ替えを実行します。つまり、2つの要素のキーが等しい場合、要素は保存されています。 –