Verwendung lokaler Variablen in einem Lambda-Ausdruck

7

Ich habe 2 Listenobjekte vom Typ einer Klasse,

%Vor%

Jetzt muss ich alle IDs von "pr" ListObject bekommen, das keinen Eintrag oder ungerade Anzahl an Einträgen im hat > "tem" ListObejct. mit Lamda.

Dafür habe ich verwendet,

%Vor%

und es funktioniert gut.

aber Sie können aus dem Code sehen, dass ich zweimal tem.FindAll (t = & gt; t.id == p) .Count verwendet habe, um mit == 0 und % 2! = 0 .

  

Gibt es eine Möglichkeit, tem.FindAll (t = & gt; t.id == p) .Count einmal zu verwenden   Speichern Sie es in einer temporären Variablen und vergleichen Sie dann diese Variable mit    == 0 und % 2! = 0 .

     

Einfacher möchte ich es nur einmal für zwei Bedingungen hier verwenden.

    
Rezoan 06.09.2013, 12:23
quelle

5 Antworten

14

Verwenden Sie eine Anweisung Lambda anstelle eines Ausdrucks Lambda

%Vor%     
Ahmed KRAIEM 06.09.2013, 12:27
quelle
4

Vielleicht einfach:

%Vor%

gibt zwei Personen zurück:

%Vor%     
Tim Schmelter 06.09.2013 12:31
quelle
3

Neben der Anweisung lambda können Sie die Klausel let verwenden:

%Vor%     
Vladimir 06.09.2013 13:15
quelle
2
%Vor%     
Keith Payne 06.09.2013 12:28
quelle
2

Nebenbei gesagt, würden Sie, rein leistungsmäßig, eine bessere Leistung erzielen, wenn Sie eine Hash-Zuordnung für jede ID zu ihrer Zählung erstellen und sie dann in einer Schleife durchsuchen.

Im Moment haben Sie einen O(n*m) -Algorithmus, der auf O(n+m) reduziert werden würde:

%Vor%     
Groo 06.09.2013 12:40
quelle

Tags und Links