2012-03-09 26 views
0

常に異なる次元を持つ2つの配列を比較しようとしています。異なる次元の2つの配列を比較する

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

私は試して、新しい配列に一致する項目を得ることができました。 {> - しかし、私は、例えばARR1

ARR2

でARR1である新しい配列に「3」、私は両方の配列を比較し、唯一のアイテムを入れるために期待していだけ

比類のないアイテムを取得することを期待しておりません1,2,3}とarr2 - > {1,2}は3の配列をもたらすはずです3 arr1 - > {1,2,3,4}とarr2 - > {1,2} 、事前

で4つの

おかげでEnumerable.Except

を使用せずに .net frameworkの古いバージョンのためにこれを行う方法はあります
+0

正確にどのバージョンの.Netが使用していますか? –

+0

@JoelCoehoorn:2.0 –

+0

私はあなたのタグで何をしたのですか? –

答えて

1

を。 我々はparamOldと呼ばれる2つの配列{ "1"、 "2"、 "3"}とparamNew { "2"、 "3"}なし重複と整数の2つのソート配列について

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 
関連する問題