Bagaimana saya bisa menemukan indeks suatu item dalam daftar tanpa mengulanginya?
Saat ini ini tidak terlihat sangat bagus - mencari daftar item yang sama dua kali, hanya untuk mendapatkan indeks:
var oProp = something;
int theThingIActuallyAmInterestedIn = myList.IndexOf(myList.Single(i => i.Prop == oProp));
int index
?Untuk tipe sederhana, Anda dapat menggunakan "IndexOf":
sumber
EDIT: Jika Anda hanya menggunakan
List<>
dan Anda hanya perlu indeks, makaList.FindIndex
memang pendekatan yang terbaik. Saya akan meninggalkan jawaban ini di sini untuk mereka yang membutuhkan sesuatu yang berbeda (misalnya di atas apa punIEnumerable<>
).Gunakan kelebihan
Select
yang mengambil indeks dalam predikat, sehingga Anda mengubah daftar Anda menjadi pasangan (indeks, nilai):Kemudian:
Atau jika Anda hanya menginginkan indeks dan Anda menggunakannya di banyak tempat, Anda dapat dengan mudah menulis metode ekstensi Anda sendiri yang seperti itu
Where
, tetapi alih-alih mengembalikan item asli, itu mengembalikan indeks item-item yang cocok dengan predikat.sumber
Single()
operasi beralih pada urutan itu dan menemukan item tunggal yang cocok dengan predikat. Untuk lebih jelasnya, baca seri blog edulinq saya: codeblog.jonskeet.uk/category/edulinqJika Anda tidak ingin menggunakan LINQ, maka:
dengan cara ini Anda hanya mengulang daftar sekali saja.
sumber
FindIndex
karena minat?Berikut ini adalah kode untuk Daftar String:
Berikut adalah Kode untuk Daftar Integer:
sumber
Berikut adalah metode ekstensi yang dapat disalin / ditempel untuk IEnumerable
Nikmati.
sumber
Jika ada yang bertanya-tanya tentang
Array
versi, itu seperti ini:sumber