VB中Arraylists的交集

时间:2014-04-02 10:37:53

标签: arrays vb.net compare

我有一个遗留代码库,我有四个ArraysLists(不同大小)。我想比较这四个arraylists并将相同的值保存在一个单独的Array / Arraylist中。

由于排序并不重要,因此阵列可以多次具有相同的值。你可以说我只需要ArrayLists的交集。

以下代码有效,但当然这不是最好的方法,循环所有数组 -

For i = 0 To arr.Count - 1 Step 1
   For j = 0 To arr1.Count - 1 Step 1
       If arr.Item(i) = arr1.Item(j) Then
          For k = 0 To arr2.Count - 1 Step 1
              If arr.Item(i) = arr2.Item(k) Then
                 For l = 0 To arr3.Count - 1 Step 1
                     If arr.Item(i) = arr3.Item(l) Then
                        // the value arr.Item(i) exists in all 4 arrys
                        // save this to another array
                     End If
                 Next
              End If
          Next
        End If
     Next
Next

由于我的arrayList大小可能是数千,这不是我想知道如何解决这个问题的方式。

感谢。

PS。很抱歉,如果这是一个重复的问题,因为我无法在任何地方进行搜索(我是VB的新手)。

1 个答案:

答案 0 :(得分:1)

你可以使用ArrayList.Contains缩短/简化事情:

For i As Integer = 0 To arr.Count - 1
     If Arr1.Contains(arr(i)) AndAlso Arr2.Contains(arr(i)) _
             AndAlso Arr3.Contains(arr(i)) AndAlso Arr4.Contains(arr(i)) Then

             // the value arr(i) exists in all 4 arrayLISTS
             // save this to another array
      End If
Next

速度可能会有很大不同,但代码肯定更容易阅读。注意:AndAlso在这方面很重要,因为当结果为假时,它会使后面的测试短路。