Cara termudah untuk menyelesaikan masalah adalah mengelompokkan elemen berdasarkan nilainya, dan kemudian memilih perwakilan grup jika ada lebih dari satu elemen dalam grup. Di LINQ, ini diterjemahkan menjadi:
var query = lst.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(y => y.Key)
.ToList();
Jika Anda ingin tahu berapa kali elemen diulang, Anda dapat menggunakan:
var query = lst.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(y => new { Element = y.Key, Counter = y.Count() })
.ToList();
Ini akan List
menghasilkan tipe anonim, dan setiap elemen akan memiliki properti Element
danCounter
, untuk mengambil informasi yang Anda butuhkan.
Dan terakhir, jika kamus yang Anda cari, Anda dapat menggunakannya
var query = lst.GroupBy(x => x)
.Where(g => g.Count() > 1)
.ToDictionary(x => x.Key, y => y.Count());
Ini akan mengembalikan kamus, dengan elemen Anda sebagai kunci, dan berapa kali itu diulang sebagai nilai.
code
for (int i = 0; i <duplicates.Count; i ++) {int duplikat = duplikat [i]; duplicatesLocation.Add (duplikat, Daftar baru <int> ()); for (int k = 0; k <hitsList.Length; k ++) {if (hitsList [k] .Berisi (duplikat)) {duplicatesLocation.ElementAt (i) .Value.Add (k); }} // menghapus duplikat sesuai dengan beberapa aturan. }code
Cari tahu apakah enumerable berisi duplikat :
Cari tahu apakah semua nilai dalam enumerable unik :
sumber
Cara lain menggunakan
HashSet
:Jika Anda ingin nilai unik dalam daftar duplikat Anda:
Berikut adalah solusi yang sama dengan metode ekstensi generik:
sumber
List<int> { 1, 2, 3, 4, 5, 2 }
sebagai sumber, hasilnya adalahIEnumerable<int>
dengan satu elemen memiliki nilai1
(di mana nilai duplikat yang benar adalah 2)Console.WriteLine("Count: {0}", duplicates.Count());
tepat di bawahnya dan itu mencetak6
. Kecuali saya kehilangan sesuatu tentang persyaratan untuk fungsi ini, seharusnya hanya ada 1 item dalam koleksi yang dihasilkan.ToList
untuk memperbaiki masalah ini, tetapi itu berarti bahwa metode ini dieksekusi segera setelah dipanggil, dan bukan ketika Anda mengulangi hasilnya.var hash = new HashSet<int>();
var duplicates = list.Where(i => !hash.Add(i));
akan mengarah ke daftar yang mencakup semua kejadian duplikat. Jadi, jika Anda memiliki empat kemunculan 2 dalam daftar Anda, maka daftar duplikat Anda akan berisi tiga kemunculan 2, karena hanya satu dari 2 yang dapat ditambahkan ke HashSet. Jika Anda ingin daftar Anda mengandung nilai-nilai unik untuk setiap duplikat, gunakan kode ini sebagai gantinya:var duplicates = mylist.Where(item => !myhash.Add(item)).ToList().Distinct().ToList();
Kamu bisa melakukan ini:
Dengan metode ekstensi ini:
Menggunakan IsMultiple () dalam metode Duplikat lebih cepat daripada Count () karena ini tidak mengulangi seluruh koleksi.
sumber
Count()
adalah pra dihitung dan solusi Anda mungkin lebih lambat.Count()
] pada dasarnya berbeda dari pengulangan seluruh daftar.Count()
sudah dihitung sebelumnya tetapi iterasi seluruh daftar tidak.Saya membuat ekstensi untuk menanggapi ini Anda bisa memasukkannya ke dalam proyek Anda, saya pikir ini mengembalikan kasus terbanyak ketika Anda mencari duplikat di Daftar atau Linq.
Contoh:
sumber
Untuk menemukan nilai duplikat saja:
Misalnya. var list = baru [] {1,2,3,1,4,2};
jadi kelompokkan dengan kelompokkan angka dengan kunci mereka dan akan mempertahankan hitungan (berapa kali itu diulang) dengan itu. Setelah itu, kami hanya memeriksa nilai-nilai yang telah diulang lebih dari satu kali.
Untuk menemukan nilai uniuqe saja:
Misalnya. var list = baru [] {1,2,3,1,4,2};
jadi kelompokkan dengan kelompokkan angka dengan kunci mereka dan akan mempertahankan hitungan (berapa kali itu diulang) dengan itu. Setelah itu, kami hanya memeriksa nilai-nilai yang telah diulang hanya sekali berarti unik.
sumber
var unique = list.Distinct(x => x)
Set lengkap Linq ke ekstensi SQL fungsi Duplikat diperiksa di MS SQL Server. Tanpa menggunakan .ToList () atau IEnumerable. Kueri ini mengeksekusi di SQL Server daripada di memori. . Hasilnya hanya kembali di memori.
sumber
ada jawaban tetapi saya tidak mengerti mengapa tidak bekerja;
solusi saya seperti itu dalam situasi ini;
sumber