128 votes

Comment puis-je obtenir chaque nième élément d'une Liste<T>?

Je suis en utilisant .NET 3.5 et que vous souhaitez être en mesure d'obtenir tous les nième élément d'une Liste. Je ne suis pas gêné de savoir s'il est réalisé à l'aide d'une expression lambda ou LINQ.

Modifier

On dirait que cette question a provoqué beaucoup de débats (ce qui est une bonne chose, non?). La principale chose que j'ai appris c'est que quand vous pensez que vous savez tous les moyens de faire quelque chose (même aussi simple que cela), détrompez-vous!

222voto

mquander Points 32650
return list.Where((x, i) => i % nStep == 0);

39voto

Michael Todd Points 9384

Je sais que c'est "old school", mais pourquoi ne pas simplement utiliser une boucle for avec stepping = n?

37voto

MartinStettner Points 14514

Sonne comme

IEnumerator<T> GetNth<T>(List<T> list, int n) {
  for (int i=0; i<list.Count; i+=n)
    yield return list[i]
}

ferait l'affaire. Je ne vois pas la nécessité d'utiliser Linq ou des expressions lambda.

EDIT:

Faire

public static class MyListExtensions {
  public static IEnumerable<T> GetNth<T>(this List<T>, int n) {
    for (int i=0; i<list.Count; i+=n)
      yield return list[i]
  }
}

et vous écrivez dans un LINQish façon

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

2ème Édition:

Pour le rendre encore plus LINQish

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

32voto

JaredPar Points 333733

Vous pouvez utiliser la Où la surcharge qui passe l'index le long de avec l'élément

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

10voto

Quintin Robinson Points 41988

Pour La Boucle

for(int i = 0; i < list.Count; i += n)
    //Nth Item..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X