Pertanyaan saya adalah tentang menghitung elemen Kamus
// Dictionary definition
private Dictionary<string, string> _Dictionary = new Dictionary<string, string>();
// add values using add
_Dictionary.Add("orange", "1");
_Dictionary.Add("apple", "4");
_Dictionary.Add("cucumber", "6");
// add values using []
_Dictionary["banana"] = 7;
_Dictionary["pineapple"] = 7;
// Now lets see how elements are returned by IEnumerator
foreach (KeyValuePair<string, string> kvp in _Dictionary)
{
Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value));
}
Bagaimana urutan elemen-elemen tersebut dihitung? Dapatkah saya memaksakan urutan menurut abjad?
c#
.net
dictionary
ienumerable
Kapten Komik
sumber
sumber
Jawaban:
Urutan elemen dalam kamus adalah non-deterministik. Gagasan tentang keteraturan tidak didefinisikan untuk hashtable. Jadi, jangan mengandalkan pencacahan dalam urutan yang sama saat elemen ditambahkan ke kamus. Itu tidak dijamin.
Kutipan dari dok :
sumber
Jika Anda ingin elemen diurutkan, gunakan OrderedDictionary . Sebuah hastable / kamus biasa dipesan hanya dalam beberapa arti dari tata letak penyimpanan.
sumber
Anda selalu bisa menggunakannya
SortedDictionary
untuk itu. Perhatikan bahwa kamus diurutkan berdasarkan Key, secara default, kecuali pembanding telah ditentukan.Saya skeptis tentang penggunaan
OrderedDictionary
untuk apa yang Anda inginkan karena dokumentasi mengatakan bahwa:sumber
SortedDictionary<K,V>
diimplementasikan sebagai Pohon Pencarian Biner, yang memberikan operasi waktu dan ruang kompleksitas yang berbeda dibandingkan dengan berbasis hashtableDictionary<K,V>
. Jika pengguna memerlukanO(1)
struktur hashtable sisipkan / hapus dan juga ingin mengulang elemen dalam urutan kunci maka mereka harus melakukannyadict.Keys.OrderBy( k => k ).Select( k => dict[k] )
(dengan biayaO(n)
ruang danO( n log n )
waktu) untukOrderBy()
(yang perlu menyangga seluruh koleksi kunci dalam daftar internal ).Item akan dikembalikan dalam urutan yang kebetulan disimpan secara fisik di kamus, yang bergantung pada kode hash dan urutan item ditambahkan. Dengan demikian, urutan akan tampak acak, dan saat penerapan berubah, Anda tidak boleh bergantung pada urutan yang tetap sama.
Anda dapat memesan item saat menghitungnya:
Dalam framework 2.0, pertama-tama Anda harus memasukkan item ke dalam daftar untuk mengurutkannya:
sumber
Untuk OrderedDictionary:
Item dikembalikan sesuai urutan penambahannya.
sumber
Array asosiatif (alias, tabel hash) tidak berurutan, yang berarti bahwa elemen dapat diurutkan dengan cara apa pun yang bisa dibayangkan.
NAMUN, Anda dapat mengambil kunci array (hanya kunci), mengurutkan sesuai abjad (melalui fungsi sortir) dan kemudian mengerjakannya.
Saya tidak dapat memberi Anda sampel C # karena saya tidak tahu bahasanya, tetapi ini seharusnya cukup bagi Anda untuk melanjutkan sendiri.
sumber