125 Stimmen

Wie kann ich jedes n-te Element aus einer List<T> erhalten?

Ich benutze .NET 3.5 und möchte in der Lage sein, jedes *n*te Element aus einer Liste zu erhalten. Es ist mir egal, ob dies mit einem Lambda-Ausdruck oder LINQ erreicht wird.

Bearbeiten

Sieht so aus, als ob diese Frage ziemlich viel Debatte ausgelöst hat (was ja gut ist, oder?). Das Hauptding, das ich gelernt habe, ist, dass man, wenn man denkt, dass man jeden Weg kennt, um etwas zu tun (selbst so etwas Einfaches wie das hier), nochmal nachdenken sollte!

215voto

mqp Punkte 66863
return list.Where((x, i) => i % nStep == 0);

bleibt unverändert.

39voto

Michael Todd Punkte 16235

Ich weiß, dass es "altmodisch" ist, aber warum nicht einfach eine for-Schleife mit Schrittweite = n verwenden?

37voto

MartinStettner Punkte 27921

Hört sich an wie

IEnumerator GetNth(List list, int n) {
  for (int i=0; i

``würde funktionieren. Ich sehe keinen Bedarf, Linq oder Lambda-Ausdrücke zu verwenden.

BEARBEITEN:

Mach es

public static class MyListExtensions {
  public static IEnumerable GetNth(this List list, int n) {
    for (int i=0; i

`und du schreibst es auf eine LINQ-artige Weise

from var element in MyList.GetNth(10) select element;

2. Bearbeitung:

Um es noch mehr wie LINQ aussehen zu lassen

from var i in Range(0, ((myList.Length-1)/n)+1) select list[n*i];` ``

32voto

JaredPar Punkte 699699

Sie können das Where-Überladen verwenden, das den Index zusammen mit dem Element übergibt

var everyFourth = list.Where((x,i) => i % 4 == 0);

10voto

Quintin Robinson Punkte 78652

For-Schleife

for(int i = 0; i < list.Count; i += n)
    //N-tes Element..

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X