Prüfe, ob eine Liste von ganzen Zahlen um eins erhöht wird

7

Gibt es eine Möglichkeit, mit LINQ zu prüfen, ob eine Liste von ganzen Zahlen "sequentiell" ist - also 1,2,3,4,5 oder 14,15,16,17,18?

    
Wilson 10.04.2013, 00:02
quelle

4 Antworten

16

Sie können dies über Enumerable.Zip tun:

%Vor%

Dies funktioniert, indem jedes Wertepaar genommen wird und geprüft wird, ob die Sekunde 1 mehr als die erste ist und boolesche Werte zurückgegeben werden. Wenn alle Paare den Kriterien entsprechen, sind die Werte sequenziell.

Da es sich um eine Liste von Ganzzahlen handelt, können Sie dies etwas effizienter tun:

%Vor%

Dies funktioniert nur bei Sequenzen, auf die per Index zugegriffen werden kann. Beachten Sie, dass wir values[i] , nicht values[i-1] verwenden, da der Aufruf Skip die Indizes effektiv verschiebt.

    
Reed Copsey 10.04.2013, 00:08
quelle
11
%Vor%     
Jacob Seleznev 10.04.2013 00:15
quelle
2

Eine weitere Option ist die Verwendung von Aggregieren , um die Sequenz nur einmal zu durchlaufen.

Beachten Sie, dass im Gegensatz zu All von Reed empfohlen Copsey Aggregate nicht in der Mitte anhalten kann, wenn die Bedingung fehlschlägt ...

%Vor%

Eine zierlichere Version hätte einen Iterator, der den vorherigen Wert mitbringt, oder einen speziellen Code, der den Iterator auf "First and the rest" aufteilt, um Reeds Lösung mit einer einzigen Iteration für jedes Aufzählungselement zu implementieren.

    
Alexei Levenkov 10.04.2013 02:00
quelle
-1

Wenn Sie bereits wissen, dass die Zahlen, die Sie in Ihrer Liste haben, eindeutig und auch sortiert sind, dann ist die einfachste Überprüfung für sequenzielle nur

%Vor%

Nehmen Sie mindestens 1 Element in der Liste an.

    
Cine 01.07.2016 02:59
quelle

Tags und Links