【问题标题】:Compare two arrays with different dimension比较两个不同维度的数组
【发布时间】:2012-03-09 11:13:55
【问题描述】:

我正在尝试比较两个总是具有不同维度的数组。

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,有什么方法可以做到这一点

【问题讨论】:

  • 究竟使用的是哪个版本的 .Net?
  • 看看我刚刚用你的标签做了什么?
  • 另外:你想对 arr1 中潜在的重复项做什么?结果应该只包括不同的项目吗?或者你能保证没有重复吗?

标签: .net vb.net arrays .net-2.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

【讨论】:

    【解决方案2】:

    你可以使用 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
    

    【讨论】:

    • 这在 vb 中可行吗?这种方式在c#中非常好
    • 这取决于 .NET 版本而不是语言(但是是的,你是正确的例子是在 C# 中)。
    • 谢谢你的回答,方法和我在这里找到的很相似msdn.microsoft.com/en-us/library/bb300779.aspx
    • 是的,当然!我想这是 except() 的一个常见例子! :)
    • 你知道为旧版本的 .net 框架执行此操作的方法吗?
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 2013-04-02
      • 2018-04-28
      • 2020-05-25
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 2014-04-17
      相关资源
      最近更新 更多