C # verschiedene Elemente von 2 Sammlungen zusammenführen

7

Ich suche nach einer performanten Methode, um bestimmte Elemente einer zweiten ICollection zu einer bestehenden hinzuzufügen. Ich benutze .NET 4.

    
0xbadf00d 13.05.2011, 14:48
quelle

4 Antworten

13

Das sollte es tun:

%Vor%     
AD.Net 13.05.2011, 14:51
quelle
6

Solange sie IEnumerable sind, können Sie die Go-to-Linq-Antwort verwenden:

%Vor%

Dies wird den Standard-Gleichheitsvergleich verwenden, der für die meisten Objekte eine Referenzgleichheit ist. Um dies zu ändern, können Sie einen generischen IEqualityComparer für den Elementtyp in Ihrer Sammlung definieren, der einen semantischen Vergleich durchführt, und ihn als zweites Argument der Union angeben.

    
KeithS 13.05.2011 14:52
quelle
2

Eine andere Möglichkeit, Ihrer bestehenden Liste hinzuzufügen, wäre:

%Vor%     
Patrick McDonald 13.05.2011 15:16
quelle
2

Die direkteste Antwort auf Ihre Frage - da Sie nicht viel Details über die tatsächlichen ICollection-Typen angegeben haben, die Sie als Eingabe oder als Ausgabe benötigen, ist diejenige, die von KeithS gegeben wird.

%Vor%

Dies wird ein eindeutiges IEnumerable zurückgeben - wenn Sie das brauchen, dann ist es SEHR schnell. Ich habe eine kleine Test-App (unten) erstellt, die die union-Methode (MethodA) gegen eine einfache hashset-Methode zur Deduplizierung ausführt und einen Hashset (MethodeB) zurückgibt. Die union-Methode DESTROYS das hashset:

  

MethodeA: 1ms

     

MethodeB: 2827ms

Allerdings - Das IEnumerable in eine andere Art von Sammlung wie List & lt; & gt; (wie die Version ADas gepostet) ändert alles:

Einfach .ToList () zu MethodeA

hinzufügen %Vor%

Ändert die Ergebnisse:

  

MethodeA: 3656ms

     

MethodeB: 2803ms

Also - es scheint, dass mehr über den spezifischen Fall, mit dem Sie arbeiten, bekannt sein müsste - und jede Lösung, die Sie sich vorstellen, sollte getestet werden, da eine kleine (Code-) Änderung RIESIGE Auswirkungen haben kann.

Unten ist der Test, den ich verwendet habe, um diese Methoden zu vergleichen - ich bin sicher, es ist eine dumme Art zu testen - aber es scheint zu funktionieren:)

%Vor%     
sfsr 13.05.2011 15:48
quelle

Tags und Links