我有一个遗留代码库,我有四个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的新手)。
答案 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
在这方面很重要,因为当结果为假时,它会使后面的测试短路。