Cara Tercepat untuk Menemukan Item Umum di Beberapa Daftar di C#
Saat bekerja dengan koleksi di C#, Anda mungkin sering menemui situasi di mana Anda perlu menemukan elemen yang umum di beberapa daftar. Ini sangat berguna ketika Anda ingin memfilter hasil berdasarkan kriteria tertentu. Dalam posting blog ini, kita akan membahas skenario umum: bagaimana cara cepat mengidentifikasi subset dari objek Option
yang muncul di setiap daftar dalam daftar daftar.
Pernyataan Masalah
Bayangkan Anda memiliki daftar daftar, khususnya suatu struktur seperti List<List<Option>> optionLists
. Anda perlu menentukan objek Option
mana yang ada di semua N
daftar. Untuk menyelesaikan ini, kita perlu menyadari bahwa kesetaraan objek Option
ditentukan oleh properti string tertentu, seperti option1.Value == option2.Value
. Pada akhirnya, kita ingin mengembalikan List<Option>
di mana setiap item muncul hanya sekali.
Solusi: Menemukan Opsi Umum
Untuk menangani masalah ini, kita dapat memanfaatkan LINQ (Language Integrated Query) di C#. LINQ menyediakan cara yang kuat untuk mengkueri koleksi, menjadikannya ideal untuk kasus penggunaan kita. Berikut adalah potongan kode efektif yang menyelesaikan tugas ini:
var x = from list in optionLists
from option in list
where optionLists.All(l => l.Any(o => o.Value == option.Value))
orderby option.Value
select option;
Penjelasan Kode
Mari kita uraikan kueri LINQ langkah demi langkah:
-
Klausul From Luar: Bagian pertama
from list in optionLists
mengiterasi setiap daftar dalam daftar utama kita (optionLists
). -
Klausul From Dalam: Bagian kedua
from option in list
mengakses setiapOption
dalam daftar saat ini. -
Klausul Where: Ini adalah bagian penting dari solusi:
- Kondisi
where optionLists.All(l => l.Any(o => o.Value == option.Value))
memeriksa apakahoption
saat ini ditemukan di semua daftar dalamoptionLists
. - Metode
Any
memeriksa apakah adaOption o
di daftar saat inil
di manaValue
cocok denganValue
darioption
saat ini.
- Kondisi
-
Pengurutan Hasil: Klausul
orderby option.Value
mengurutkan objekOption
yang dihasilkan berdasarkanValue
mereka. -
Klausul Select: Terakhir,
select option
mengumpulkan semua opsi yang memenuhi syarat ke dalam sebuah koleksi.
Pertimbangan Penting
-
Nilai Distinct: Kode yang diberikan tidak menyertakan pilihan distinct, yang berarti ia dapat mengembalikan beberapa objek
Option
denganValue
yang sama. Jika Anda memerlukanOptions
yang unik, pertimbangkan untuk menambahkan.Distinct()
ke kueri Anda. -
Performa: Tergantung pada ukuran daftar Anda, efisiensi pendekatan ini sangat signifikan. Kueri LINQ dioptimalkan dan dapat berkinerja baik dengan dataset berukuran sedang.
Kesimpulan
Menemukan item umum di beberapa daftar dapat dicapai dengan efisien di C# menggunakan LINQ, seperti yang diilustrasikan dalam contoh kita. Dengan memanfaatkan kekuatan LINQ, kita dapat melakukan kueri kompleks dengan usaha pengkodean minimal. Ini tidak hanya mempercepat proses pengkodean Anda tetapi juga meningkatkan keterbacaan dan pemeliharaan kode Anda.
Sekarang Anda sudah dilengkapi dengan pengetahuan ini, Anda dapat dengan mudah menerapkan solusi semacam itu dalam proyek Anda, menjadikan penanganan koleksi Anda lebih sederhana dan lebih efisien.