Reputation: 14460
I am trying to compare two arrays that always have different dimensions.
eg. arr1 -> {1,2,3} and arr2->{1,2}
I did try and able to get the matching items to new array. But I am expecting to get the unmatched items only
I am expecting to compare both arrays and put only the item '3' to a new array which is in arr1 and not in arr2
eg arr1 -> {1,2,3} and arr2->{1,2} should result a new array with 3 arr1 -> {1,2,3,4} and arr2->{1,2} should result a array with 3,4
Is there any way of doing this for older version of .net framework
without using Enumerable.Except
Upvotes: 0
Views: 832
Reputation: 25023
For two sorted arrays of integers with no duplicates, as shown in your examples,
Public Function differences(a() As Integer, b() As Integer) As Integer()
Dim aLen As Integer = a.Length
If aLen = 0 Then
Return b
End If
Dim bLen As Integer = b.Length
If bLen = 0 Then
Return a
End If
Dim diff As New List(Of Integer)
Dim i As Integer = 0
Dim j As Integer = 0
Do
If a(i) = b(j) Then
i += 1
j += 1
ElseIf a(i) > b(j) Then
diff.Add(b(j))
j += 1
ElseIf a(i) < b(j) Then
diff.Add(a(i))
i += 1
End If
Loop While i < aLen AndAlso j < bLen
If i < aLen Then
For k = i To aLen - 1
diff.Add(a(k))
Next
End If
If j < bLen Then
For k = j To bLen - 1
diff.Add(b(k))
Next
End If
Return diff.ToArray
End Function
Upvotes: 0
Reputation: 14460
I have done something like this.
if we have two arrays called paramOld
{"1","2","3"} and paramNew
{"2","3"}
If paramOld.Length > paramNew.Length Then
Dim paramDelete((paramOld.Length - paramNew.Length) - 1) As String
Dim isFound As Boolean = False
For i As Int32 = 0 To oldparamLenght - 1
isFound = False
For j As Int32 = 0 To newparamLength - 1
If paramOld(i) = paramNew(j) Then
isFound = True
Exit For
End If
Next
If isFound = False Then
paramDelete(i) = paramOld(i)
End If
Next
End If
Upvotes: 1
Reputation: 67090
Can you use LINQ? Except()
may be right for you.
var arr3 = arr1.Except(arr2);
Edited
If you can't use LINQ here a quick and dirty version of that function:
Public Shared Function Except(a As List(Of Integer), b As List(Of Integer)) As List(Of Integer)
Dim result As New List(Of Integer)()
For Each value As Integer In a
If Not b.Contains(value) Then
result.Add(value)
End If
Next
For Each value As Integer In b
If Not a.Contains(value) Then
result.Add(value)
End If
Next
Return result
End Function
Upvotes: 0