Używam .NET 3.5 i chciałbym mieć możliwość uzyskania każdego * n
* tego elementu z listy. Nie przejmuję się tym, czy osiąga się to za pomocą wyrażenia lambda lub LINQ.
Edytować
Wygląda na to, że to pytanie wywołało sporo dyskusji (co jest dobre, prawda?). Najważniejsze, czego się nauczyłem, to to, że kiedy myślisz, że znasz każdy sposób zrobienia czegoś (nawet tak prostego), pomyśl jeszcze raz!
Odpowiedzi:
źródło
Wiem, że to „stara szkoła”, ale dlaczego nie użyć po prostu pętli for z stepping = n?
źródło
Brzmi jak
załatwi sprawę. Nie widzę potrzeby używania Linq lub wyrażeń lambda.
EDYTOWAĆ:
Zrób to
i piszesz w sposób LINQish
2. edycja :
Aby było jeszcze bardziej LINQish
źródło
list[i]
zamiast tego po prostu zwracaszlist[n-1]
?Możesz użyć przeciążenia Where, które przekazuje indeks wraz z elementem
źródło
Dla pętli
źródło
List<T>
, więcCount
jest zdefiniowane jako tanie.Nie jestem pewien, czy można to zrobić za pomocą wyrażenia LINQ, ale wiem, że można to zrobić za pomocą
Where
metody rozszerzenia. Na przykład, aby uzyskać co piąty przedmiot:To dostanie pierwszy przedmiot, a stamtąd co piąty. Jeśli chcesz zacząć od piątej pozycji zamiast pierwszej, porównujesz z 4 zamiast z 0.
źródło
Myślę, że jeśli podasz rozszerzenie linq, powinieneś być w stanie operować na najmniej specyficznym interfejsie, a więc na IEnumerable. Oczywiście, jeśli zależy ci na szybkości, szczególnie w przypadku dużego N, możesz zapewnić przeciążenie dostępu indeksowanego. Ta ostatnia eliminuje potrzebę iteracji po dużych ilościach niepotrzebnych danych i będzie znacznie szybsza niż klauzula Where. Zapewnienie obu przeciążeń umożliwia kompilatorowi wybranie najbardziej odpowiedniego wariantu.
źródło
wynik
źródło
Imho, żadna odpowiedź nie jest dobra. Wszystkie rozwiązania zaczynają się od 0. Ale ja chcę mieć rzeczywisty n-ty element
źródło
@belucha Podoba mi się to, ponieważ kod klienta jest bardzo czytelny, a kompilator wybiera najbardziej wydajną implementację. Oparłbym się na tym, zmniejszając wymagania
IReadOnlyList<T>
i oszczędzając Division dla wysokowydajnego LINQ:źródło