2012-03-09 90 views
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,而无需使用Enumerable.Except

任何方式
+0

哪个版本的.Net正在使用? – 2012-03-09 14:11:30

+0

@JoelCoehoorn:2.0 – 2012-03-09 14:56:21

+0

看看我刚​​才用你的标签做了什么? – 2012-03-09 14:59:09

回答

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 
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 
+0

这是可能的vb?这种方式在c#中是完全正确的。 – 2012-03-09 11:22:27

+0

它取决于.NET版本,而不是语言(但是,你是正确的例子是在C#中)。 – 2012-03-09 11:23:23

+0

感谢您的答案,方式是非常相似,因为我发现它在这里** http://msdn.microsoft.com/en-us/library/bb300779.aspx** – 2012-03-09 11:26:29

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