Saya mencoba mencari cara untuk menelusuri daftar item umum yang ingin saya hapus dari daftar item lain.
Jadi katakanlah saya memiliki ini sebagai contoh hipotetis
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
Saya ingin melintasi list1 dengan foreach dan menghapus setiap item di List1 yang juga ada di List2.
Saya tidak yakin bagaimana cara melakukannya karena foreach tidak berbasis indeks.
list1
yang ada dilist2
, atau Anda ingin menghapus item darilist2
yang ada dilist1
? Pada saat komentar ini, setiap jawaban yang diberikan akan melakukan yang terakhir.Jawaban:
Anda dapat menggunakan Kecuali :
Anda mungkin bahkan tidak membutuhkan variabel sementara itu:
Catatan yang
Except
tidak mengubah daftar baik - itu membuat daftar baru dengan hasilnya.sumber
IEnumerable<car>
, bukan aList<car>
. Anda perlu meneleponToList()
untuk mendapatkan daftar kembali. Selain itu, saya percaya seharusnyaGetSomeOtherList().Except(GetTheList()).ToList()
using System.Linq;
jika Anda tidak memilikinya sebelumnya.Except
karena ini benar-benar melakukan operasi yang ditetapkan , yang membedakan daftar yang dihasilkan. Saya tidak mengharapkan perilaku ini karena saya menggunakanList
, bukan aHashSet
. TerkaitAnda tidak perlu indeks, karena
List<T>
kelas memungkinkan Anda untuk menghapus item berdasarkan nilai daripada indeks dengan menggunakanRemove
fungsi.sumber
list2.Remove(item);
pernyataan.list1.ForEach(c => list2.Remove(c));
Saya akan merekomendasikan menggunakan metode ekstensi LINQ . Anda dapat dengan mudah melakukannya dengan satu baris kode seperti:
Ini dengan asumsi tentu saja objek di list1 yang Anda hapus dari list2 adalah contoh yang sama.
sumber
Dalam kasus saya, saya memiliki dua daftar yang berbeda, dengan pengidentifikasi umum, seperti kunci asing. Solusi kedua yang dikutip oleh "nzrytmn" :
Adalah orang yang paling cocok dengan situasi saya. Saya perlu memuat DropDownList tanpa catatan yang sudah terdaftar.
Terima kasih !!!
Ini kode saya:
sumber
Anda bisa menggunakan LINQ, tapi saya akan menggunakan
RemoveAll
metode. Saya pikir itu adalah salah satu yang lebih baik mengekspresikan niat Anda.sumber
sumber
O(N)
, ini akan mengarah padaO(N^2)
yang mungkin menjadi masalah dengan daftar besar.Solusi 1: Anda dapat melakukan ini:
Tetapi dalam beberapa kasus mungkin solusi ini tidak berfungsi. jika tidak berhasil, Anda dapat menggunakan solusi kedua saya.
Solusi 2:
kami berpura-pura bahwa list1 adalah daftar utama Anda dan list2 adalah daftar secondry Anda dan Anda ingin mendapatkan item dari list1 tanpa item dari list2.
sumber
Karena
Except
tidak mengubah daftar, Anda dapat menggunakan ForEach diList<T>
:Ini mungkin bukan cara yang paling efisien, tetapi sederhana, karena itu dapat dibaca, dan memperbarui daftar asli (yang merupakan persyaratan saya).
sumber
Ini dia ..
sumber