Estou usando o .NET 3.5 e gostaria de obter cada * n
* o item de uma lista. Não estou preocupado em saber se isso é alcançado usando uma expressão lambda ou LINQ.
Editar
Parece que essa pergunta provocou bastante debate (o que é bom, certo?). A principal coisa que aprendi é que, quando você acha que sabe todas as maneiras de fazer algo (mesmo tão simples quanto isso), pense novamente!
Respostas:
fonte
Eu sei que é "old school", mas por que não usar um loop for com stepping = n?
fonte
Soa como
faria o truque. Não vejo necessidade de usar expressões Linq ou lambda.
EDITAR:
Faça
e você escreve de maneira LINQish
2ª Edição :
Para torná-lo ainda mais LINQish
fonte
list[i]
vez de apenas retornarlist[n-1]
?Você pode usar a sobrecarga de Where, que passa o índice junto com o elemento
fonte
For Loop
fonte
List<T>
, entãoCount
é definido como barato.Não tenho certeza se é possível fazer com uma expressão LINQ, mas sei que você pode usar o
Where
método de extensão para fazer isso. Por exemplo, para obter cada quinto item:Isso obterá o primeiro item e a cada cinco a partir daí. Se você quiser começar no quinto item em vez do primeiro, compare com 4 em vez de comparar com 0.
fonte
Eu acho que se você fornecer uma extensão linq, deverá ser capaz de operar na interface menos específica, portanto, em IEnumerable. Obviamente, se você deseja velocidade especialmente para N grandes, pode sobrecarregar o acesso indexado. O último elimina a necessidade de iterar sobre grandes quantidades de dados desnecessários e será muito mais rápido do que a cláusula Where. Fornecer ambas as sobrecargas permite que o compilador selecione a variante mais adequada.
fonte
resultado
fonte
Imho nenhuma resposta está certa. Todas as soluções começam em 0. Mas eu quero ter o enésimo elemento real
fonte
@belucha Eu gosto disso, porque o código do cliente é muito legível e o compilador escolhe a implementação mais eficiente. Eu construiria sobre isso reduzindo os requisitos
IReadOnlyList<T>
e para salvar a Divisão para LINQ de alto desempenho:fonte