Saya punya daftar
List<MyObject> myList
dan saya menambahkan item ke daftar dan saya ingin memeriksa apakah objek itu sudah ada dalam daftar.
jadi sebelum saya melakukan ini:
myList.Add(nextObject);
Saya ingin melihat apakah nextObject sudah ada dalam daftar.
Objek "MyObject" memiliki sejumlah properti tetapi perbandingannya didasarkan pada pencocokan pada dua properti.
Apa cara terbaik untuk melakukan pemeriksaan sebelum saya menambahkan "MyObject" baru ke daftar "MyObject" ini.
Satu-satunya solusi yang saya pikirkan adalah mengubah dari daftar ke kamus dan kemudian membuat kuncinya sebagai string gabungan dari properti (ini tampaknya sedikit tidak elegan).
Adakah solusi bersih lainnya yang menggunakan list atau LINQ atau yang lainnya?
Cukup gunakan metode Berisi . Perhatikan bahwa ini bekerja berdasarkan fungsi kesetaraan
Equals
sumber
Jika tetap dapat menggunakan 2 properti tersebut, Anda dapat:
sumber
Apakah Anda yakin Anda memerlukan daftar dalam kasus ini? Jika Anda mengisi daftar dengan banyak item, kinerja akan terganggu dengan
myList.Contains
ataumyList.Any
; run-time akan menjadi kuadrat. Anda mungkin ingin mempertimbangkan untuk menggunakan struktur data yang lebih baik. Sebagai contoh,Anda dapat menggunakan HashSet dengan cara berikut:
Tentu saja, jika definisi persamaan untuk
MyClass
'universal', Anda tidak perlu menulisIEqualityComparer
implementasi; Anda bisa menggantiGetHashCode
danEquals
di kelas itu sendiri.sumber
Hal lain yang perlu disebutkan adalah Anda harus memastikan bahwa fungsi kesetaraan Anda seperti yang Anda harapkan. Anda harus mengganti metode sama dengan untuk menyiapkan properti apa dari objek Anda harus cocok agar dua contoh dianggap sama.
Maka Anda bisa melakukan mylist.contains (item)
sumber
Berikut adalah aplikasi konsol cepat untuk menggambarkan konsep cara menyelesaikan masalah Anda.
Nikmati!
sumber
Sunting: Saya pertama kali mengatakan:
Apa yang tidak elegan tentang solusi kamus. Kelihatannya sangat elegan bagi saya, terutama karena Anda hanya perlu menyetel pembanding dalam pembuatan kamus.
Namun tentu saja, tidak anggun menggunakan sesuatu sebagai kunci jika itu juga nilainya.
Oleh karena itu saya akan menggunakan HashSet. Jika operasi nanti membutuhkan pengindeksan, saya akan membuat daftar darinya ketika Penambahan selesai, jika tidak, cukup gunakan hashset.
sumber
Sederhana tetapi berhasil
atau
sumber
Jika Anda menggunakan EF core add
Contoh
sumber