Aufteilen eines IEnumerable in zwei

7

Ich möchte eine Liste in zwei Listen aufteilen, eine, die direkt behandelt werden kann, und die andere ist der Rest, der in einer Kette an andere Handler weitergegeben wird.

Eingabe:

  • Eine Liste von Elementen
  • eine Filtermethode, um zu bestimmen, in welcher Liste das Element enthalten sein soll.

Ausgabe:

  • eine "wahre" Liste
  • eine "falsche" Liste

Gibt es das schon? Vielleicht eine Linq-Methode, an die ich momentan nicht denke? Hat jemand sonst ein gutes C # -Beispiel?

    
chills42 11.10.2012, 19:45
quelle

4 Antworten

19

Hier ist eine einfache Methode. Beachten Sie, dass ToLookup eifrig die Eingabefolge auswertet.

%Vor%

Sie können GroupBy verwenden, um eine faule Auswertung der Eingabesequenz zu erhalten, aber es ist nicht ganz so hübsch:

%Vor%     
Servy 11.10.2012 19:49
quelle
3

Nach einigem Nachdenken und einigen ziemlich abwegigen Ideen bin ich zu dem Schluss gekommen: Versuch nicht, LINQ dazu zu bringen, dies für dich zu tun.

Haben Sie ein paar Schleifen, die Ihre Eingabesequenz konsumieren, übergeben Sie jedes Element an den ersten "Handler", der damit zurechtkommt, und stellen Sie entweder sicher, dass Ihr letzter Handler alles fängt oder im schlimmsten Fall eine List zurückgibt co_de%.

%Vor%

Dies hat den Vorteil, dass jedes Element in der Reihenfolge der Eingabe behandelt wird, anstatt sie in Gruppen zu unterteilen und die Reihenfolge vor dem, was Sie später tun, zu verlieren.

    
Rawling 11.10.2012 19:55
quelle
1

Ich stimme Servys Antwort zu, aber nach den Kommentaren dachte ich, dass dieser Ansatz interessant sein könnte:

%Vor%

das könnte so verwendet werden:

%Vor%

Hier machen wir Akkumulation auf der sekundären Sequenz (die "falschen" Werte), aber Live-Verarbeitung dieser sekundären Sequenz wäre auch möglich, also mit nur einer Aufzählung der Quelle.

    
Wasp 12.10.2012 14:08
quelle
0

LINQ so oft wie möglich verwenden:

%Vor%     
Expro 11.10.2012 20:02
quelle

Tags und Links