2010-07-02 3 views
0

J'ai deux arraylists, et je voudrais avoir une nouvelle arraylist avec seulement les articles peu communs.Est-ce un bon moyen d'obtenir la différence de deux arraylists?

Est-ce la «meilleure» ou au moins décente de le faire?

Public Function diffLists(ByRef first, ByRef second As Collection) As ArrayList 
    Dim retval As New ArrayList() 
    For Each element In first 
     If Not second.Contains(element) Then 
      retval.Add(element) 
     End If 
    Next 
    retval.TrimToSize() 
    Return retval 
End Function 

TIA

Répondre

1

Ce n'est pas une bonne façon, car il ne vous donne que des éléments de la première liste qui ne sont pas dans le second pas des éléments qui ne sont pas dans les deux listes (pour être je comprends votre question) .

De toute façon, la meilleure façon d'y parvenir est probablement d'utiliser Linq. Si vous voulez une meilleure façon de faire ce que vous faites, vous pouvez utiliser le si vous voulez vraiment la différence entre les deux, la méthode Except comme si

first.Except(second) 

Cependant, vous aurez besoin d'obtenir un Union du deux listes (qui filtrera également les doublons), puis exclude les éléments qui sont dans both.

first.Union(second) 
    .Except(first.Intersect(second)); 

Cette approche a aussi l'avantage de dire ce que vous voulez faire (intention) par opposition à la façon d'aborder la tâche (de mise en œuvre spécifique).

0

Je ne connais pas VB, mais en général, la «meilleure» façon de le faire est de trier les deux tableaux, puis de comparer les éléments côte à côte, en éliminant les éléments égaux en cours de route.

En pseudo-code:

Sort(A) 
Sort(B) 
I = 0, J = 0, K = Min(A.Length, B.Length) 
While I < K And J < K 
    If A[I] == B[J] 
    I++ 
    J++ 
    Else If A[I] < B[J] 
    Add A[I] to resultant list 
    I++ 
    Else // B[J] must be < A[I] 
    Add B[J] to resultant list 
    J++ 
    End If 
End While 
If I < A.Length 
    Add remaining elements of A to resultant list 
Else If J < B.Length 
    Add remaining elements of B to resultant list 
End If 
+0

Si vous pouvez garantir que les éléments de la liste sont uniques (liste est un ensemble), il y a un moyen plus facile avec la combinaison des ensembles en une seule liste, trier les éléments et jeter ceux dont il y en a deux. – R0MANARMY

Questions connexes