J'utilise .NET 3.5 et j'aimerais pouvoir obtenir tous les *n
* ème élément d'une liste. Je ne suis pas dérangé de savoir si cela est réalisé à l'aide d'une expression lambda ou de LINQ.
Éditer
On dirait que cette question a provoqué beaucoup de débats (ce qui est une bonne chose, non?). La principale chose que j'ai apprise est que lorsque vous pensez connaître toutes les façons de faire quelque chose (même aussi simple que cela), détrompez-vous!
Réponses:
la source
Je sais que c'est "old school", mais pourquoi ne pas utiliser simplement une boucle for avec pas à pas = n?
la source
Sonne comme
ferait l'affaire. Je ne vois pas la nécessité d'utiliser des expressions Linq ou une expression lambda.
ÉDITER:
Fais-le
et vous écrivez de manière LINQish
2e édition :
Pour le rendre encore plus LINQish
la source
list[i]
simplement revenirlist[n-1]
?Vous pouvez utiliser la surcharge Where qui transmet l'index avec l'élément
la source
Pour la boucle
la source
List<T>
, doncCount
est défini comme bon marché.Je ne sais pas s'il est possible de faire avec une expression LINQ, mais je sais que vous pouvez utiliser la
Where
méthode d'extension pour le faire. Par exemple, pour obtenir un article sur cinq:Cela obtiendra le premier élément et tous les cinq à partir de là. Si vous voulez commencer au cinquième élément au lieu du premier, vous comparez avec 4 au lieu de comparer avec 0.
la source
Je pense que si vous fournissez une extension linq, vous devriez pouvoir opérer sur l'interface la moins spécifique, donc sur IEnumerable. Bien sûr, si vous êtes prêt pour la vitesse, en particulier pour les grands N, vous pourriez fournir une surcharge pour l'accès indexé. Cette dernière supprime la nécessité d'itérer sur de grandes quantités de données inutiles et sera beaucoup plus rapide que la clause Where. Fournir les deux surcharges permet au compilateur de sélectionner la variante la plus appropriée.
la source
production
la source
Imho aucune réponse n'est juste. Toutes les solutions commencent à 0. Mais je veux avoir le nième élément réel
la source
@belucha J'aime ça, car le code client est très lisible et le compilateur choisit l'implémentation la plus efficace. Je tirerais parti de cela en réduisant les exigences
IReadOnlyList<T>
et en sauvegardant la Division pour LINQ haute performance:la source