2012-03-09 89 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