比较具有不同维度的两个数组

时间:2012-03-09 11:13:55

标签: .net vb.net arrays .net-2.0

我试图比较两个总是有不同尺寸的数组。

eg. arr1 -> {1,2,3} and arr2->{1,2}

我确实尝试过能够将匹配的项目添加到新数组中。但我期待只获得无与伦比的项目

我希望比较两个数组,只将项目'3'放入arr1中的新数组,而不是arr2

例如arr1 - > {1,2,3}和arr2-> {1,2}应该会生成一个带有3的新数组 arr1 - > {1,2,3,4}和arr2-> {1,2}应该产生一个3,4

的数组

提前致谢

有没有办法在不使用Enumerable.Except

的情况下为旧版.net framework执行此操作

3 个答案:

答案 0 :(得分:1)

我做过类似的事情。 如果我们有两个名为paramOld {“1”,“2”,“3”}和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

答案 1 :(得分:0)

你能使用LINQ吗? Except()可能适合您。

var arr3 = arr1.Except(arr2);

<强>被修改

如果你不能在这里使用LINQ这个函数的快速和脏版本:

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

答案 2 :(得分:0)

对于两个没有重复的排序整数数组,如示例所示,

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