Linq entfernt nur ein Objekt, wenn es doppelt vorhanden ist

8

Ich habe 5 Zahlen, d.h. 1 1 1 2 3; Ich muss sie addieren, außer die minimale Zahl, aber ich kann sie nur einmal entfernen (wenn das Minimum mehr als einmal auftritt, muss ich den Rest behalten). Wie kann ich es mit Linq machen? Ich dachte:

%Vor%

Aber es entfernen Sie alle 1 von den Listen. Ich brauche einen Weg, um von dort aus zu gehen, wenn mehr als 1 Vorkommen vorhanden ist.

All das mit Linq, wenn es möglich ist.

    
CRK 16.02.2017, 12:23
quelle

4 Antworten

11

Eine einfache Lösung wäre die folgende, würde aber die Sammlung zweimal durchlaufen.

%Vor%

Für eine Lösung, die nur einmal die Sammlung mit Linq iteriert, könnten Sie schreiben:

%Vor%     
Magnus 16.02.2017, 12:27
quelle
13

Hier ist ein Liner, der auch funktioniert, wenn Ihr Array leer ist

%Vor%     
fubo 16.02.2017 12:25
quelle
5

Obwohl Magnus bereits sehr gut aussieht, muss die Liste noch zweimal durchlaufen werden. Einmal um das Minium zu finden und einmal um die Summe zu finden.

Ich zeige nur eine ausführlichere aber dafür schnellere Implementierung:

%Vor%

Ich bin mir nicht sicher, ob eine for -Schleife schneller als foreach ist, aber ich denke, dass dieser Unterschied nicht wirklich messbar sein sollte.

Für pwas Kommentar füge ich die for Version wieder hinzu:

%Vor%     
René Vogt 16.02.2017 12:39
quelle
1

Versuchen Sie Folgendes:

%Vor%     
Ivan Kishchenko 16.02.2017 12:28
quelle

Tags und Links