Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menapis Koleksi dengan Cekap Berdasarkan Berbilang Kata Kunci dengan Lambda/LINQ?
Gunakan Lambda/LINQ untuk menapis set yang mengandungi berbilang kata kunci dengan cekap
Soalan:
Bagaimana untuk menggunakan ungkapan Lambda atau LINQ dengan cekap untuk menapis koleksi berdasarkan berbilang kata kunci?
Penyelesaian:
Contoh yang diberikan dalam soalan menyerlahkan keperluan untuk menyemak berbilang kata kunci dalam satu medan (di sini medan "Ulasan"). Walaupun terdapat contoh penapisan berdasarkan satu kata kunci, memperluaskan logik ini kepada berbilang kata kunci memerlukan pendekatan yang lebih berkuasa.
Kaedah ungkapan Lambda:
Kami boleh menggunakan kaedah sambungan yang disediakan dalam jawapan untuk mencapai keperluan ini menggunakan ungkapan Lambda:
<code class="language-csharp">var newList = MainList .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true) .ToList();</code>
Kaedah LINQ:
Sebagai alternatif, kita boleh menggunakan LINQ untuk mencapai hasil yang sama:
<code class="language-csharp">var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));</code>
Penjelasan:
Kedua-dua kaedah menggunakan kaedah sambungan FilterByItems dalam kelas QueryableExtensions. Kaedah ini menerima koleksi item, predikat untuk digunakan dan nilai Boolean yang menunjukkan sama ada untuk melaksanakan operasi "ATAU" atau "DAN".
Dalam contoh kami, kami menghantar senarai kata kunci sebagai item, predikat yang menyemak sama ada medan Komen mengandungi setiap kata kunci dan menetapkan isAtau kepada benar untuk melaksanakan operasi "ATAU". Ini memastikan bahawa jika rekod mengandungi mana-mana kata kunci yang ditentukan, ia disertakan dalam keputusan.
Pelaksanaan kaedah sambungan FilterByItems:
Kaedah FilterByItems dilaksanakan menggunakan kelas ExpressionReplacer, yang membolehkan kami menggantikan sebahagian daripada ungkapan. Ini digunakan untuk menjana predikat yang menyemak kehadiran setiap kata kunci.
Contoh penggunaan:
Untuk menggunakan kaedah FilterByItems, kami hanya menyediakan koleksi untuk ditapis, senarai kata kunci untuk disemak dan secara pilihan menetapkan isAtau kepada benar untuk operasi "ATAU" atau kepada palsu untuk operasi "DAN".
<code class="language-csharp">// 过滤“Comments”字段中的关键词 var filteredList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k)); // 使用OR操作包含任何匹配关键词的记录 var newList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true);</code>
Atas ialah kandungan terperinci Bagaimana untuk Menapis Koleksi dengan Cekap Berdasarkan Berbilang Kata Kunci dengan Lambda/LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!