Estoy usando .NET 3.5 y me gustaría poder obtener todos los * n
* elementos de una lista. No me preocupa si se logra usando una expresión lambda o LINQ.
Editar
Parece que esta pregunta provocó bastante debate (lo cual es bueno, ¿no?). Lo principal que he aprendido es que cuando crees que sabes todas las formas de hacer algo (incluso tan simple como esto), ¡piénsalo de nuevo!
Respuestas:
fuente
Sé que es "de la vieja escuela", pero ¿por qué no usar un bucle for con stepping = n?
fuente
Suena como
haría el truco. No veo la necesidad de usar Linq o expresiones lambda.
EDITAR:
Hazlo
y escribes a la manera de LINQish
2da edición :
Para hacerlo aún más LINQish
fuente
list[i]
lugar de regresarlist[n-1]
?Puede usar la sobrecarga Where que pasa el índice junto con el elemento
fuente
En bucle
fuente
List<T>
, por lo queCount
se define como barato.No estoy seguro de si es posible hacerlo con una expresión LINQ, pero sé que puede usar el
Where
método de extensión para hacerlo. Por ejemplo, para obtener cada quinto artículo:Esto obtendrá el primer elemento y cada quinto a partir de ahí. Si desea comenzar en el quinto elemento en lugar del primero, compare con 4 en lugar de comparar con 0.
fuente
Creo que si proporciona una extensión linq, debería poder operar en la interfaz menos específica, por lo tanto, en IEnumerable. Por supuesto, si está preparado para la velocidad, especialmente para N grandes, puede proporcionar una sobrecarga para el acceso indexado. Este último elimina la necesidad de iterar sobre grandes cantidades de datos no necesarios y será mucho más rápido que la cláusula Where. Proporcionar ambas sobrecargas permite al compilador seleccionar la variante más adecuada.
fuente
salida
fuente
En mi humilde opinión, ninguna respuesta es correcta. Todas las soluciones comienzan desde 0. Pero quiero tener el n-ésimo elemento real
fuente
@belucha Me gusta esto, porque el código del cliente es muy legible y el compilador elige la implementación más eficiente. Me basaría en esto reduciendo los requisitos
IReadOnlyList<T>
y guardando la División para LINQ de alto rendimiento:fuente