Gibt es einen besseren Weg, um das nächste Element in einer Liste und Schleife vom Ende zum Anfang zurückzugeben?

8

Ich habe die folgende Liste von distinct Strings:

"A"
"B"
"C"

Wenn ich den Gegenstand nach A haben möchte, bekomme ich B. Nach B bekomme ich C. Nach C bekomme ich A. Momentan habe ich den folgenden Code, aber aus irgendeinem Grund fühlt es sich für mich an, dass es einen besseren Weg gibt um darüber zu gehen (vielleicht?).

%Vor%

Ich bin definitiv offen für eine LINQ-artige Art, dies auch zu tun:)

    
m-y 23.04.2012, 15:35
quelle

7 Antworten

6

Ich denke, vielleicht können Sie die Zeile ändern

%Vor%

für etwas wie

%Vor%     
Andres 23.04.2012, 15:40
quelle
7

Die Lösung, die Sie haben, ist funktional korrekt, aber die Leistung lässt ein wenig zu wünschen übrig. Wenn Sie mit einer Listenstilstruktur arbeiten, würden Sie normalerweise erwarten, dass GetNext ein Ergebnis in O (1) -Zeit zurückgibt, aber diese Lösung ist O (N).

%Vor%

Der erste Aufruf von CreateAt ist hier O (N), aber nachfolgende Aufrufe von GetNext sind O (1).

%Vor%     
JaredPar 23.04.2012 15:46
quelle
1

Ich kann eine Optimierung sehen, wenn Sie den aktuellen Index statt der aktuellen Zeichenfolge verfolgen, aber dazu müsste die Liste der Elemente korrigiert werden, d. h. nicht ändern.

Sie könnten auch return items[(index + 1) % items.Count];

Sonst sieht dieser Code für mich gut aus, aber vielleicht hat jemand eine cleverere Lösung.

    
MCattle 23.04.2012 15:42
quelle
1

LINQ ist hier nicht das geeignete Werkzeug.

Es klingt, als wäre eine LinkedList<T> hier die bessere Sammlung:

%Vor%

Hier sind die Vor- und Nachteile einer LinkedList im Vergleich zu einer Liste.

    
Tim Schmelter 23.04.2012 15:49
quelle
1

A linq Weg:

%Vor%     
Joe 23.04.2012 15:53
quelle
0

Sie können den Mod-Operator verwenden, um dies ein wenig zu vereinfachen und alles zu einer Aussage zusammenzufassen:

%Vor%

Es ist definitiv kürzer, aber ich bin mir nicht sicher, ob das Wetter auch besser lesbar ist:)

    
Jan 23.04.2012 15:42
quelle
0

Ich denke, die beste Lösung ist in der unten stehenden Link, ich habe es ausprobiert und funktioniert wie Charme.

Ссылка

    
Ravia 23.04.2012 15:52
quelle

Tags und Links