Saya menggunakan .NET 3.5 dan ingin mendapatkan setiap * n
* item dari Daftar. Saya tidak peduli apakah itu dicapai dengan menggunakan ekspresi lambda atau LINQ.
Sunting
Sepertinya pertanyaan ini memancing cukup banyak perdebatan (mana hal yang bagus, bukan?). Hal utama yang saya pelajari adalah ketika Anda berpikir Anda tahu segala cara untuk melakukan sesuatu (bahkan sesederhana ini), pikirkan lagi!
Jawaban:
sumber
Saya tahu ini "jadul", tetapi mengapa tidak menggunakan loop for dengan stepping = n?
sumber
Terdengar seperti
akan berhasil. Saya tidak melihat perlunya menggunakan LINQ atau ekspresi lambda.
EDIT:
Lakukan
dan Anda menulis dengan cara LINQish
Edit kedua :
Untuk membuatnya lebih LINQish
sumber
list[i]
sebagai gantinya hanya kembalilist[n-1]
?Anda dapat menggunakan Where overload yang meneruskan indeks bersama dengan elemennya
sumber
Untuk Loop
sumber
List<T>
, jadiCount
diartikan sebagai murah.Saya tidak yakin apakah itu mungkin dilakukan dengan ekspresi LINQ, tetapi saya tahu bahwa Anda dapat menggunakan
Where
metode ekstensi untuk melakukannya. Misalnya untuk mendapatkan setiap item kelima:Ini akan mendapatkan item pertama dan setiap kelima dari sana. Jika Anda ingin memulai dari item kelima dan bukan yang pertama, Anda membandingkan dengan 4 daripada membandingkan dengan 0.
sumber
Saya rasa jika Anda menyediakan ekstensi LINQ, Anda harus dapat beroperasi pada antarmuka yang paling tidak spesifik, sehingga pada IEnumerable. Tentu saja, jika Anda siap untuk kecepatan terutama untuk N besar Anda mungkin memberikan kelebihan beban untuk akses yang diindeks. Yang terakhir menghilangkan kebutuhan untuk mengulang sejumlah besar data yang tidak diperlukan, dan akan jauh lebih cepat daripada klausa Where. Menyediakan kedua kelebihan beban memungkinkan kompilator memilih varian yang paling sesuai.
sumber
keluaran
sumber
Imho tidak ada jawaban yang benar. Semua solusi dimulai dari 0. Tapi saya ingin memiliki elemen ke-n yang sebenarnya
sumber
@belucha Saya suka ini, karena kode klien sangat mudah dibaca dan Compiler memilih Implementasi yang paling efisien. Saya akan membangun ini dengan mengurangi persyaratan untuk
IReadOnlyList<T>
dan menyimpan Divisi untuk LINQ berkinerja tinggi:sumber