Hier ist eine Lösung in LINQ:
%Vor% Dies erstellt eine andere Sequenz, indem das erste Element der Liste übersprungen wird. Anschließend werden Elemente aus beiden Sequenzen mit demselben Index und demselben Wert gefunden. Es wird in linearer Zeit ausgeführt, aber nur, weil eine Liste O(1)
access by index anbietet.
Hier ist ein Ansatz, der relativ einfach ist, nur einmal über die Sequenz iteriert und mit jeder Sequenz (nicht nur Listen) arbeitet:
%Vor%Hier ist eine weitere, die noch einfacher ist, da es nur eine LINQ-Abfrage ist, aber sie verwendet Nebenwirkungen in der Where-Klausel, was unangenehm ist:
%Vor% Eine dritte Alternative, die etwas sauberer ist, aber eine SelectConsecutive
Methode verwendet, die im Grunde SelectPairs
von diese Antwort , aber umbenannt, um etwas klarer zu sein:)
Sie könnten dies tun:
%Vor%Das ist ein bisschen wie @ KJNs Antwort, außer dass ich denke, dass es die "doubles" - und "double doubles" -Klausel in der Frage etwas besser ausdrückt:
g.Count() > 1
) g.Skip(1)
) PS: Wir gehen hier davon aus, dass GroupBy
die Liste nicht zuerst sortiert und wenn ja, dass diese Sortierung nicht durch eine vorsortierte Liste negativ beeinflusst wird ...