2010-07-02 13 views
0

두 명의 arraylists가 있는데, 나는 드문 아이템 만 가진 새로운 arraylist를 원합니다.이것은 두 명의 arraylists의 차이를 얻는 좋은 방법입니까?

"최고"또는 적어도 적절한 방법입니까? 그것은 단지 당신에게 두 목록에없는 요소가 아닌 두 번째에 (내가 당신의 질문을 이해 예정)하지 않은 첫 번째 목록에서 요소를 제공하기 때문에 좋은 방법이 아니다

Public Function diffLists(ByRef first, ByRef second As Collection) As ArrayList 
    Dim retval As New ArrayList() 
    For Each element In first 
     If Not second.Contains(element) Then 
      retval.Add(element) 
     End If 
    Next 
    retval.TrimToSize() 
    Return retval 
End Function 

TIA

답변

1

.

어느 쪽이든,이를 수행하는 가장 좋은 방법은 아마 Linq를 사용하는 것입니다. 당신이 무슨 일을하는지 할 수있는 더 좋은 방법을 원한다면, 당신은 당신이 정말 둘 사이의 차이를 원한다면, 당신은의 Union을 얻을해야합니다, 그러나 그래서

first.Except(second) 

같은 Except 방법을 사용할 수 있습니다 두 개의 목록 (또한 중복 된 내용을 필터링 함)과 exclude의 요소는 both입니다.

first.Union(second) 
    .Except(first.Intersect(second)); 

이 방법 또한 작업 (특정 구현)를 접근하는 방법과 반대로 당신이 완료 (의도)을 원하는 진술의 추가 혜택을했다.

0

저는 VB에 익숙하지 않지만 일반적으로이 두 가지 배열을 정렬 한 다음 요소를 나란히 비교하여 같은 요소는 무시합니다.

의사 코드에서

:

Sort(A) 
Sort(B) 
I = 0, J = 0, K = Min(A.Length, B.Length) 
While I < K And J < K 
    If A[I] == B[J] 
    I++ 
    J++ 
    Else If A[I] < B[J] 
    Add A[I] to resultant list 
    I++ 
    Else // B[J] must be < A[I] 
    Add B[J] to resultant list 
    J++ 
    End If 
End While 
If I < A.Length 
    Add remaining elements of A to resultant list 
Else If J < B.Length 
    Add remaining elements of B to resultant list 
End If 
+0

당신이 목록에서 요소 (목록 집합입니다), 하나의리스트로 세트를 결합 요소를 정렬 및 던지고 쉬운 방법이 고유한지 보장 할 수있는 경우 그것들 중에는 두 가지가있다. – R0MANARMY

관련 문제