2011-02-09 3 views
3

나는 두 개의리스트를 비교해야하고 은 같은 값을 가지고 있는지 아닌지를 알고 만 알면된다. 나는 그 차이점을 가지고 무엇을하려고하지 않는다.두 개의 목록이 다른 경우에만 알 수있는 모든 내장 메서드?

C#에서이를 수행하는 가장 좋은 방법은 무엇입니까?

나는 목록을 반복 할 수 있지만 더 나은 성능을 제공하는 LINQ/extenstion 메서드가 내장되어 있는지 알고 싶습니다. Except/Intersect를 시도했으나이를 달성하는 데 가장 적합한 것인지 모릅니다.

업데이트 : 목록에 중복 된 목록이 없습니다.

답변

6

어떻게 중복을 처리 하시겠습니까? 예를 들어, {2, 1, 1}을 (1, 2)와 같다고 계산 하시겠습니까?

신속하고 더러운 방법 : (. 내가 그렇지 않으면 단지 SequenceEqual를 사용 ... 순서는 관계가 있으리라 믿고있어)

만 효과적으로, 여기에 두 가지 옵션이있다 "세트"에 대해 신경 가정

if (!list1.Except(list2).Any() && !list2.Except(list1).Any()) 

약간 청소기 방법 :

var set = new HashSet<int>(list1); // Adjust case accordingly 
if (set.SetEquals(list2)) 
{ 
    // Lists were equal 
} 

한 가지 고려해야 할 : 당신이 세트로 치료에만 관심이 있다면, 당신은 s의 일련의 표현을 사용할 수 있습니다 tart와 함께 목록 대신 ...

+2

'SymmetricExceptWith' /'Any'보다는'SetEquals' 만 사용할 수 있습니다 : http://msdn.microsoft.com/en-us/library/bb346516.aspx – LukeH

+0

@LukeH : 고마워, 그걸 놓친 거지 :) –

+0

목록에 중복이 없으므로 {1, 2, 3}, {2, 3, 4} 같이됩니다. – Dienekes

관련 문제