Saya memiliki daftar testList
yang berisi banyak string. Saya ingin menambahkan string baru ke dalam testList
hanya jika belum ada dalam daftar. Oleh karena itu, saya perlu melakukan pencarian daftar case-insensitive dan membuatnya efisien. Saya tidak dapat menggunakan Contains
karena itu tidak memperhitungkan casing. Saya juga tidak ingin menggunakan ToUpper/ToLower
untuk alasan kinerja. Saya menemukan metode ini, yang berfungsi:
if(testList.FindAll(x => x.IndexOf(keyword,
StringComparison.OrdinalIgnoreCase) >= 0).Count > 0)
Console.WriteLine("Found in list");
Ini berfungsi, tetapi juga cocok dengan sebagian kata. Jika daftar berisi "kambing", saya tidak dapat menambahkan "oat" karena mengklaim bahwa "oat" sudah ada dalam daftar. Apakah ada cara untuk secara efisien mencari daftar dalam kasus yang sensitif, di mana kata-kata harus sama persis? Terima kasih
sumber
List<>.Exists(Predicate<>)
metode instance. Perhatikan juga bahwa jika daftar berisinull
entri, ini dapat meledak. Dalam hal ini lebih aman untuk mengatakankeyword.Equals(x, StringComparison.OrdinalIgnoreCase)
daripadax.Equals(keyword, StringComparison.OrdinalIgnoreCase)
(jika Anda dapat menjamin bahwakeyword
itu tidak pernah nol).Saya menyadari ini adalah posting lama, tetapi untuk berjaga-jaga jika ada orang lain yang melihat, Anda dapat menggunakan
Contains
dengan menyediakan pembanding kesetaraan string yang tidak sensitif seperti:Ini telah tersedia sejak .net 2.0 menurut msdn .
sumber
StringComparer
kelas telah ada sejak 2.0, tapi itu kelebihan Mengandung diperkenalkan di 3,5. msdn.microsoft.com/en-us/library/bb339118(v=vs.110).aspxBerdasarkan jawaban Adam Sills di atas - inilah metode ekstensi bersih yang bagus untuk Berisi ... :)
sumber
Anda dapat menggunakan StringComparer:
sumber
Berdasarkan jawaban Lance Larsen - inilah metode ekstensi dengan string yang disarankan. Bandingkan, bukan string. Setara
sumber
Anda memeriksa apakah hasil dari IndexOf lebih besar atau sama dengan 0, yang berarti apakah pertandingan dimulai di string mana saja . Coba periksa apakah sama dengan 0:
Sekarang "kambing" dan "gandum" tidak akan cocok, tetapi "kambing" dan "kambing" akan. Untuk menghindari ini, Anda dapat membandingkan panjang kedua string.
Untuk menghindari semua kerumitan ini, Anda dapat menggunakan kamus alih-alih daftar. Kunci mereka adalah string huruf kecil, dan nilainya akan menjadi string nyata. Dengan cara ini, kinerja tidak sakit karena Anda tidak harus menggunakan
ToLower
untuk setiap perbandingan, tetapi Anda masih bisa menggunakannyaContains
.sumber
Di bawah ini adalah contoh mencari kata kunci di seluruh daftar dan menghapus item itu:
Jika Anda ingin menghapus buku yang berisi beberapa kata kunci di properti Teks, Anda dapat membuat daftar kata kunci dan menghapusnya dari daftar buku:
sumber
Saya memiliki masalah yang sama, saya perlu indeks item tetapi itu harus case sensitive, saya melihat-lihat web selama beberapa menit dan tidak menemukan apa-apa, jadi saya hanya menulis metode kecil untuk menyelesaikannya, di sini adalah apa yang saya melakukan:
Tambahkan kode ini ke file yang sama, dan beri nama seperti ini:
Semoga ini bisa membantu, semoga berhasil!
sumber