Apakah ada yang tahu jika ada yang setara dengan Set
koleksi Java di C #? Saya tahu bahwa Anda bisa meniru set menggunakan a Dictionary
atau a HashTable
dengan mengisi tetapi mengabaikan nilai-nilai, tapi itu bukan cara yang sangat elegan.
sumber
Apakah ada yang tahu jika ada yang setara dengan Set
koleksi Java di C #? Saya tahu bahwa Anda bisa meniru set menggunakan a Dictionary
atau a HashTable
dengan mengisi tetapi mengabaikan nilai-nilai, tapi itu bukan cara yang sangat elegan.
Coba HashSet :
Kelas HashSet (Of T) menyediakan operasi set berkinerja tinggi. Kumpulan adalah kumpulan yang tidak mengandung elemen duplikat, dan yang elemennya tidak ada dalam urutan tertentu ...
Kapasitas objek HashSet (Of T) adalah jumlah elemen yang dapat dipegang oleh objek tersebut. Kapasitas objek HashSet (Of T) secara otomatis meningkat ketika elemen ditambahkan ke objek.
Kelas HashSet (Of T) didasarkan pada model set matematika dan menyediakan operasi set berkinerja tinggi mirip dengan mengakses kunci Kamus (Of TKey, TValue) atau koleksi Hashtable . Dalam istilah sederhana, kelas HashSet (Of T) dapat dianggap sebagai koleksi Kamus (Of TKey, TValue) tanpa nilai.
Koleksi HashSet (Of T) tidak diurutkan dan tidak dapat berisi elemen duplikat ...
Jika Anda menggunakan .NET 3.5, Anda bisa menggunakan
HashSet<T>
. Memang benar bahwa .NET tidak melayani set dan Java tidak.The Wintellect PowerCollections dapat membantu juga.
sumber
Jika Anda menggunakan .NET 4.0 atau yang lebih baru:
Jika Anda perlu menyortir, gunakan
SortedSet<T>
. Kalau tidak, jika tidak, gunakanHashSet<T>
karena ituO(1)
untuk mencari dan memanipulasi operasi. SedangkanSortedSet<T>
adalahO(log n)
untuk pencarian dan memanipulasi operasi.sumber
Saya menggunakan Iesi.Collections http://www.codeproject.com/KB/recipes/sets.aspx
Ini digunakan di banyak proyek OSS, saya pertama kali menemukannya di NHibernate
sumber
Saya menggunakan pembungkus di sekitar a
Dictionary<T, object>
, menyimpan nulls dalam nilai-nilai. Ini memberi O (1) menambah, mencari dan menghapus pada tombol, dan untuk semua maksud dan tujuan bertindak seperti satu set.sumber
Lihat PowerCollections di CodePlex. Selain dari Set dan OrderedSet, ia memiliki beberapa jenis koleksi berguna lainnya seperti Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary dan OrderedMultiDictionary.
Untuk koleksi lainnya, ada juga Perpustakaan Koleksi Generik C5 .
sumber
Saya tahu ini adalah utas lama, tetapi saya mengalami masalah yang sama dan menemukan HashSet sangat tidak dapat diandalkan karena diberi benih yang sama, GetHashCode () mengembalikan kode yang berbeda. Jadi, saya pikir, mengapa tidak hanya menggunakan Daftar dan menyembunyikan metode add seperti ini
Karena Daftar menggunakan metode Persamaan hanya untuk menentukan kesetaraan, Anda dapat menentukan metode Persamaan pada tipe T Anda untuk memastikan Anda mendapatkan hasil yang diinginkan.
sumber
List.Contains
adalahO(n)
kompleksitas yang berarti bahwa AndaAdd
metode sekarang menjadiO(n)
kompleksitas juga. Dengan asumsi koleksi batin tidak perlu diubah ukurannya,Add
untuk keduanyaList
danHashMap
harusO(1)
rumit. TLDR: Ini akan berhasil, tetapi ini peretasan dan kurang efisien.