这是一个很好的方式来获得两个arraylists的差异?

时间:2010-07-02 20:51:35

标签: vb.net arraylist

我有两个arraylists,我想有一个新的arraylist只有不常见的项目。

这是“最好的”或至少是体面的方式吗?

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

2 个答案:

答案 0 :(得分:1)

这不是一个好方法,因为它只给你第一个列表中的元素不在第二个不是两个列表中的元素(我理解你的问题)。

无论哪种方式,实现这一目标的最佳方法可能是使用Linq。如果你想要一个更好的方法来做你正在做的事情,你可以使用Except这样的方法

first.Except(second)

但是,如果你真的想要两者之间的区别,你需要得到两个列表中的Union(这也将过滤掉重复项),然后exclude中的元素both

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

这种方法还有一个额外的好处,就是说明你想做什么(意图)而不是如何处理任务(具体实现)。

答案 1 :(得分: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