.GroupBy(x => x)
.GroupByは等同様のタイプのグループ列、INTに使用されます。 次に、同様のタイプのリスト<文字列をグループ化するためにどのような関数を使用できますか。C#での同様のタイプのリスト<string>グルーピング
.GroupBy(x => x)
.GroupByは等同様のタイプのグループ列、INTに使用されます。 次に、同様のタイプのリスト<文字列をグループ化するためにどのような関数を使用できますか。C#での同様のタイプのリスト<string>グルーピング
GroupBy
は、目的のために適切な方法でEquals
/GetHashCode
を実装する要素の種類に依存します。
あなたの質問は明確ではありませんが、私は同じ要素を持つ2つのリストを等価と見なしたいと思っています。独自のIEqualityComparer
実装を作成し、それをGroupBy
に渡す必要があると思われます。例えば、(未テスト):
public class ListEqualityComparer<T> : IEqualityComparer<List<T>>
{
private static readonly EqualityComparer<T> ElementComparer =
EqualityComparer<T>.Default;
public int GetHashCode(List<T> input)
{
if (input == null)
{
return 0;
}
// Could use Aggregate for this...
int hash = 17;
foreach (T item in input)
{
hash = hash *31 + ElementComparer.GetHashCode(item);
}
return hash;
}
public bool Equals(List<T> first, List<T> second)
{
if (first == second)
{
return true;
}
if (first == null || second == null)
{
return false;
}
return first.SequenceEqual(second, ElementComparer);
}
}
また、各ListEqualityComparer
インスタンスを使用すると、大文字と小文字を区別しないやり方で文字列の(例えば)のリストを比較することができるようになる別の要素ごとの比較演算を、持っている可能性があります。
FYI: 'IEqualityComparer'を' EqualityComparer'に変更するか、 'override'修飾子を二つのメソッドから削除してください。 – NtFreX
@NtFreX:ありがとう。修飾子を削除しました。 –
カスタムタイプのオブジェクトでグループ化する方法をお伺いしているとします。
オブジェクトをどのように比較するかを定義する必要があります。
コールでIEqualityComparer
を指定すると、これを行うことができます。
あなたがもしそうならタイプT
は、System.IEquatable<T>
インターフェイスを実装しているかどうかチェックする、そしてIEqualityComparer.Default
が使用され、IEqualityComparer
を指定しない場合は、その実装を使用EqualityComparer<T>
を返します。それ以外の場合は、T
によって提供されるObject.EqualsおよびObject.GetHashCodeのオーバーライドを使用するEqualityComparer<T>
を返します。
あなたの質問は私には分かりません。 –
あなたが望むものはかなり不明ですが、 'GroupBy(x => x.GetType())'でしょうか? –
サンプル入力、出力はこちら – Snowbear