2012-03-09 4 views
0

항상 서로 다른 차원을 가진 두 배열을 비교하려고합니다.다른 차원의 두 배열 비교

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

필자는 일치하는 항목을 새로운 배열로 가져올 수 있었지만 시도했습니다. > {-하지만

예를 들어 arr1 내가 두 배열을 비교하고 arr1에 새로운 배열에만 항목을 '3'넣어 기대하고 있습니다 만

타의 추종을 불허하는 항목을 얻을 것으로 기대하지 arr2에 있어요 1,2,3}와 arr2 -> {1,2}는 3을 갖는 배열을 결과로 가져와야합니다. arr1 -> {1,2,3,4} 및 arr2 -> {1,2} 사전

4 개

덕분에 Enumerable.Except

를 사용하지 않고 .net framework의 이전 버전을 위해이 일을 어떤 방법이 있나요
+0

정확히 어떤 버전의 .Net을 사용하고 있습니까? –

+0

@JoelCoehoorn : 2.0 –

+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 
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에서 완벽하게 괜찮습니다 # –

+0

그것은 언어가 아닌 .NET 버전에 따라 다르지만 (예, 올바른 예제는 C#에 있음). –

+0

대답 주셔서 감사합니다, 방법은 여기에있는 것처럼 많이 비슷합니다 ** http : //msdn.microsoft.com/en-us/library/bb300779.aspx** –

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