2009-07-28 2 views
3

나는 여러 요소가 포함 된 C# 3 HashSet 개체가 있습니다. [(a, b) = (b, a)]를 반복하지 않고 요소를 쌍으로 만들지 않고 각 쌍 사이에서 무언가를 확인하고 싶습니다.
일종의 List로 전환하려고 생각 했으므로 각 요소를 다음 요소 모두와 쌍으로 연결할 수 있습니다. 일반, 정렬되지 않은, Collection과 같은 것을하기위한 옵션이 있습니까? 또는 IQuaryable?컬렉션의 모든 고유 한 쌍을 반복하는 쉬운 방법

+1

그래서, 단지 명확하게하기 위해 : 당신이 _set_을 먹고 싶어하고,에서 예, 그 _TWO 요소 subsets_ 모두의 _sequence_ 생산을? –

+0

고유 한 두 요소로 구성된 하위 집합이므로, (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

Distinct method that takes an IEqualityComparer을 사용하면 어떨까요?

+0

아마도 여기에 뭔가가 누락되었지만 IEqualitycomparer를 사용하여 확실하게 확인할 수는 있습니다. 모든 쌍은 독특합니까? 엘리먼트가 자신과 쌍을 이루지 않게하기 위해 쉽게 사용할 수는 있지만 충분하지는 않습니다. –

+0

HashSet에는 고유 한 요소 만 포함되어 있으므로 먼저 모든 튜플을 만들어야합니다. 지나치게 복잡해 보입니다. –

+0

mm .. 또는 어쩌면 나는 한 쌍의 요소에 대한 비교자를 만들고 모든 쌍의 IEnumerable을 통해 구별 점에 사용할 수 있습니다. 나는 나중에 그것을 조사 할 것이다. 감사. –

관련 문제