.net 比较两个不同维度的数组

.net 比较两个不同维度的数组,.net,vb.net,arrays,.net-2.0,.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的数组 对于较旧版本的.net framework是否有任何方法

我试图比较两个始终具有不同维度的数组

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的数组


对于较旧版本的
.net framework
是否有任何方法可以不使用而执行此操作您可以使用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

我做过类似的事情。 如果我们有两个数组,分别称为
paramOld
{“1”、“2”、“3”}和
paramNew
{“2”、“3”}


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

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
公共函数差异(a()为整数,b()为整数)为整数()
Dim aLen作为整数=a.长度
如果aLen=0,则
返回b
如果结束
Dim bLen作为整数=b.长度
如果bLen=0,则
归还
如果结束
Dim diff作为新列表(整数)
尺寸i为整数=0
尺寸j为整数=0
做
如果a(i)=b(j),那么
i+=1
j+=1
如果a(i)>b(j)那么
差异添加(b(j))
j+=1
如果a(i)
这在vb中是否可行?这种方法在c语言中非常好,这取决于.NET版本而不是语言(但是是的,你是对的,c语言中的例子)。谢谢你的回答,这种方法和我在这里找到的非常相似是的,当然!我想这是Except()的一个常见示例!:)您知道对较旧版本的.net framework执行此操作的方法吗?您确切使用的是哪一版本的.net?请参阅我刚才对您的标记所做的操作?另外:对于arr1中的潜在重复项,您希望执行什么操作?结果应该只包括不同的项目吗?或者你能保证不会有复制品吗?
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