Saya telah bekerja dengan string[]
array di C # yang akan dikembalikan dari panggilan fungsi. Saya mungkin bisa melemparkan keGeneric
koleksi, tapi saya bertanya-tanya apakah ada cara yang lebih baik untuk melakukannya, mungkin dengan menggunakan array temp.
Apa cara terbaik untuk menghapus duplikat dari array C #?
c#
arrays
duplicates
lomaxx
sumber
sumber
Jawaban:
Anda bisa menggunakan kueri LINQ untuk melakukan ini:
sumber
.Distinct(StringComparer.OrdinalIgnoreCase)
untuk mendapatkan serangkaian string case-insensitive berbeda.The Distinct() method returns an unordered sequence that contains no duplicate values.
Inilah pendekatan HashSet <string> :
Sayangnya solusi ini juga memerlukan .NET framework 3.5 atau yang lebih baru karena HashSet tidak ditambahkan hingga versi itu. Anda juga bisa menggunakan array.Distinct () , yang merupakan fitur LINQ.
sumber
Kode yang diuji dan bekerja berikut ini akan menghapus duplikat dari array. Anda harus memasukkan namespace System.Collections.
Anda bisa membungkus ini menjadi fungsi jika Anda mau.
sumber
Jika Anda perlu mengurutkannya, maka Anda bisa menerapkan jenis yang juga menghapus duplikat.
Membunuh dua burung dengan satu batu, lalu.
sumber
Ini mungkin tergantung pada seberapa banyak Anda ingin merekayasa solusi - jika array tidak akan pernah sebesar itu dan Anda tidak peduli tentang pengurutan daftar Anda mungkin ingin mencoba sesuatu yang mirip dengan yang berikut:
sumber
- Ini pertanyaan wawancara yang ditanyakan setiap saat. Sekarang saya melakukan pengkodeannya.
sumber
Ini adalah O (n ^ 2) , yang tidak masalah untuk daftar pendek yang akan dimasukkan ke dalam kombo, tetapi bisa dengan cepat menjadi masalah pada koleksi besar.
sumber
sumber
Berikut ini adalah pendekatan O (n * n) yang menggunakan ruang O (1) .
Pendekatan hash / linq di atas adalah apa yang biasanya Anda gunakan dalam kehidupan nyata. Namun dalam wawancara mereka biasanya ingin menempatkan beberapa kendala misalnya ruang konstan yang mengesampingkan hash atau tidak ada api internal - yang mengesampingkan menggunakan LINQ .
sumber
strIn[j] == strIn[i]
) akan membandingkan string dengan dirinya sendiri kecuali jika diperhitungkan dengan pernyataan if.Tambahkan semua string ke kamus dan dapatkan properti Keys sesudahnya. Ini akan menghasilkan setiap string unik, tetapi tidak harus dalam urutan yang sama dengan input asli Anda.
Jika Anda mengharuskan hasil akhir memiliki urutan yang sama dengan input asli, saat Anda mempertimbangkan kemunculan pertama setiap string, gunakan algoritma berikut ini sebagai gantinya:
Pada akhirnya, daftar berisi kejadian pertama dari setiap string unik.
Pastikan Anda mempertimbangkan hal-hal seperti budaya dan semacamnya saat menyusun kamus Anda, untuk memastikan Anda menangani duplikat dengan huruf beraksen dengan benar.
sumber
Sepotong kode berikut mencoba untuk menghapus duplikat dari ArrayList meskipun ini bukan solusi yang optimal. Saya ditanya pertanyaan ini selama wawancara untuk menghapus duplikat melalui rekursi, dan tanpa menggunakan daftar array temp / kedua:
sumber
Solusi sederhana:
sumber
Mungkin hashset yang tidak menyimpan elemen duplikat dan diam-diam mengabaikan permintaan untuk menambahkan duplikat.
sumber
CATATAN: TIDAK diuji!
Dapat melakukan apa yang Anda butuhkan ...
EDIT Argh !!! dikalahkan dengan rob oleh kurang dari satu menit!
sumber
Diuji di bawah & berhasil. Yang keren adalah ia melakukan pencarian yang sensitif terhadap budaya juga
}
--AptSenSDET
sumber
Kode ini 100% menghapus nilai duplikat dari array [seperti yang saya gunakan [i]] ..... Anda dapat mengonversinya dalam bahasa OO apa pun ..... :)
sumber
Metode Ekstensi Umum:
sumber
Anda dapat menggunakan kode ini saat bekerja dengan ArrayList
sumber
sumber
Di bawah ini adalah logika sederhana di java Anda melewati elemen array dua kali dan jika Anda melihat elemen yang sama Anda menetapkan nol untuk itu ditambah Anda tidak menyentuh indeks elemen yang Anda bandingkan.
sumber
sumber
sumber
Kkk Tidak yakin apakah ini guna-guna atau hanya kode yang indah
1 strINvalues .Split (','). Distinct (). ToArray ()
2 string.Gabung (",", XXX);
1 Memisahkan array dan menggunakan Distinct [LINQ] untuk menghapus duplikat 2 Bergabung kembali tanpa duplikat.
Maaf saya tidak pernah membaca teks di StackOverFlow hanya kodenya. itu lebih masuk akal daripada teks;)
sumber
sumber
Jalan terbaik? Sulit dikatakan, pendekatan HashSet terlihat cepat, tetapi (tergantung pada data) menggunakan algoritma pengurutan (CountSort?) Dapat jauh lebih cepat.
Hampir cabang bebas. Bagaimana? Mode debug, Langkah Ke (F11) dengan array kecil: {1,3,1,1,0}
Solusi dengan dua loop bersarang mungkin membutuhkan waktu, terutama untuk array yang lebih besar.
sumber