Außer hat ähnliche Wirkung wie Distinct?

8

Ich habe gerade entdeckt, dass Except() alle Elemente in der zweiten Liste von der ersten löscht, aber es hat auch den Effekt, dass alle Elemente im zurückgegebenen Ergebnis verschieden sind.

Ich benutze einfach Where(v => !secondList.Contains(v))

Kann mir jemand erklären, warum dies das Verhalten ist, und wenn möglich, verweisen Sie mich auf die Dokumentation, die das erklärt?

    
Stephan 04.06.2010, 16:20
quelle

2 Antworten

18

Die Dokumentation für die Funktion Except lautet:

  

Erzeugt den Satzunterschied zweier Sequenzen, indem er den Standard-Gleichheitsvergleich verwendet, um Werte zu vergleichen.

     

Der Satzunterschied von zwei Mengen ist definiert als die Elemente der ersten Menge, die nicht in der zweiten Menge erscheinen.

Das wichtigste Wort hier ist set , das definiert als:

  

... eine abstrakte Datenstruktur, die bestimmte Werte speichern kann, ohne eine bestimmte Reihenfolge und keine wiederholten Werte ...

Da Except als eine mengenbasierte Operation dokumentiert ist, hat dies auch den Effekt, dass die resultierenden Werte unterschieden werden.

    
Greg Beech 04.06.2010, 16:27
quelle
0

Sie haben geschrieben:

  

Ich benutze einfach Where(v => !secondList.Contains(v))

Wenn Sie dies tun, wird immer noch Disct mit secondList gemacht.

Zum Beispiel:

%Vor%

Ich habe eine Erweiterungsmethode erstellt, um überhaupt keine Unterschiede zu haben. Beispiel für die Verwendung:

%Vor%

Das ist was es macht:

Dies ist die Quelle:

%Vor%

Edit: Eine schnellere Implementierung, basierend auf dem Kommentar von DigEmAll

%Vor%

Weitere Informationen auf mein Blog (auch Variante für Intersect und Union)

    
Alex Siepman 19.08.2013 19:29
quelle

Tags und Links