2009-07-28 9 views
3

私はいくつかの要素を含むC#3 HashSetオブジェクトを持っています。私は[(a、b)=(b、a)]を繰り返さずに、要素をそれ自身とペアリングせずに、それらのすべてのペアの間で何かをチェックしたいと思います。
何らかのリストに切り替えることを考えたので、各要素を次のすべての要素とペアにすることができます。無秩序の一般的なものを使ってそのようなことをするオプションがありますか?Collection?またはIQuaryableコレクション内のすべてのユニークペアを簡単に反復する方法

+1

ので、ちょうど明確にする:はい、あなたは_set_を撮りたい、とそれからその_two要素subsets_のすべての_sequence_を作りますか? –

+0

すべてのユニークな2要素サブセット。したがって、(a、b)がそこにある場合、(b、a)はそうではありません。 私はToList()メソッドを使うか、あるいはリストを使ってセットを切り替えてやり直すといいでしょう。 –

答えて

3

このため、インデックスでアクセスできるときは簡単ですが、ElementAt<>拡張子が存在しますが、まず.ToList()を使用する方が早いでしょう。

あなたがアドレス可能なリストを持っている:

for (int i = 0; i < list.Count-1; i++) 
    for (int j = i+1; j < list.Count; j++) 
    Foo(list[i], list[j]); 
2
+0

おそらくここで何か不足しているかもしれませんが、どうすればIEqualitycomparerを使って確実に確認できますか?すべてのペアはユニークですか?要素がそれ自身とペアになっていないことを確認するために簡単に使うことができますが、それだけでは不十分です。 –

+0

HashSetには一意の要素しか含まれていないため、最初にすべてのタプルを作成する必要があります。過度に複雑に思えます。 –

+0

mm ..または、私は、要素のペアのためのcomparerを作成し、すべてのペアのIEnumerable上の別名でそれを使用することができます。私は後でそれをチェックします。ありがとう。 –

関連する問題