Я использую .NET 3.5 и хотел бы получить каждый * n
* -й элемент из списка. Меня не беспокоит, достигается ли это с помощью лямбда-выражения или LINQ.
редактировать
Похоже, этот вопрос вызвал довольно много споров (что, правда, хорошо?). Главное, что я усвоил, это то, что когда вы думаете, что знаете все способы сделать что-то (даже такое простое), подумайте еще раз!
Ответы:
источник
Я знаю, что это «старая школа», но почему бы просто не использовать цикл for со степпингом = n?
источник
Звучит как
сделает свое дело. Я не вижу необходимости использовать Linq или лямбда-выражения.
РЕДАКТИРОВАТЬ:
Сделай это
и вы пишете в стиле LINQish
2-е редактирование :
Чтобы сделать его еще более LINQish
источник
list[i]
вместо этого просто returnlist[n-1]
?Вы можете использовать перегрузку Where, которая передает индекс вместе с элементом
источник
Для петли
источник
List<T>
, значитCount
определяется как дешевый.Я не уверен, можно ли это сделать с помощью выражения LINQ, но я знаю, что для этого можно использовать
Where
метод расширения. Например, чтобы получить каждый пятый предмет:Это получит первый предмет и каждый пятый оттуда. Если вы хотите начать с пятого элемента вместо первого, вы сравниваете с 4 вместо сравнения с 0.
источник
Я думаю, что если вы предоставите расширение linq, вы сможете работать с наименее конкретным интерфейсом, то есть с IEnumerable. Конечно, если вы настроены на скорость, особенно для больших N, вы можете предоставить перегрузку для индексированного доступа. Последнее устраняет необходимость повторения больших объемов ненужных данных и будет намного быстрее, чем предложение Where. Наличие обеих перегрузок позволяет компилятору выбрать наиболее подходящий вариант.
источник
вывод
источник
Имхо нет правильного ответа. Все решения начинаются с 0. Но я хочу иметь реальный n-й элемент.
источник
@belucha Мне это нравится, потому что код клиента очень удобочитаем, и компилятор выбирает наиболее эффективную реализацию. Я бы использовал это, уменьшив требования
IReadOnlyList<T>
и сохранив Division для высокопроизводительного LINQ:источник