Apakah ada perbedaan praktis yang nyata antara a SortedList<TKey,TValue>
dan a SortedDictionary<TKey,TValue>
? Apakah ada keadaan di mana Anda secara khusus akan menggunakan satu dan bukan yang lain?
c#
.net
generics
sortedlist
sorteddictionary
Shaul Behr
sumber
sumber
SortedList<TKey,TValue>
daripada satuSortedList<T>
? Mengapa itu tidak diterapkanIList<T>
?Jawaban:
Ya - karakteristik kinerjanya berbeda secara signifikan. Mungkin akan lebih baik untuk memanggil mereka
SortedList
danSortedTree
karena itu mencerminkan implementasi lebih dekat.Lihatlah dokumen MSDN untuk masing-masing (
SortedList
,SortedDictionary
) untuk detail kinerja untuk operasi yang berbeda di berbagai situasi. Berikut ringkasan yang bagus (dariSortedDictionary
dokumen):(
SortedList
sebenarnya mempertahankan array yang diurutkan, daripada menggunakan pohon. Ia masih menggunakan pencarian biner untuk menemukan elemen.)sumber
Berikut ini adalah tampilan tabular jika ini membantu ...
Dari perspektif kinerja :
Dari perspektif implementasi :
Untuk kira-kira parafrase, jika Anda membutuhkan kinerja baku
SortedDictionary
bisa menjadi pilihan yang lebih baik. Jika Anda membutuhkan overhead memori yang lebih rendah dan pengambilan diindeksSortedList
lebih cocok. Lihat pertanyaan ini untuk lebih lanjut tentang kapan menggunakan yang mana.Anda dapat membaca lebih lanjut di sini , di sini , di sini , di sini dan di sini .
sumber
BDictionary<Key,Value>
di LoycCore bukanSortedDictionary
.BDictionary
biasanya lebih lambat daripadaSortedDictionary
kecuali untuk ukuran yang sangat besar, tetapi lebih cepat daripadaSortedList
jika ada lebih dari 700 item. Penggunaan memori harus hanya sedikit lebih tinggi dariSortedList
(jauh lebih rendah dariSortedDictionary
), karena penggunaan array di daun pohon.Saya membuka Reflector untuk melihat ini karena sepertinya ada sedikit kebingungan
SortedList
. Ini sebenarnya bukan pohon pencarian biner, itu adalah array yang diurutkan (dengan kunci) dari pasangan nilai kunci . Ada jugaTKey[] keys
variabel yang disortir dalam sinkronisasi dengan pasangan kunci-nilai dan digunakan untuk pencarian biner.Berikut adalah beberapa sumber (penargetan .NET 4.5) untuk mencadangkan klaim saya.
Anggota pribadi
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): void
SortedList.RemoveAt (int): void
sumber
Lihatlah halaman MSDN untuk SortedList :
Dari bagian Keterangan:
sumber
Ini adalah representasi visual tentang bagaimana pertunjukan dibandingkan satu sama lain.
sumber
Cukup sudah dikatakan pada topik, namun untuk membuatnya tetap sederhana, inilah pendapat saya.
Kamus yang disortir harus digunakan saat-
Di sisi lain, Daftar Diurutkan harus digunakan ketika-
Semoga ini membantu!!
sumber
Akses indeks (disebutkan di sini) adalah perbedaan praktis. Jika Anda perlu mengakses penerus atau pendahulunya, Anda perlu SortedList. SortedDictionary tidak dapat melakukannya sehingga Anda cukup terbatas dengan bagaimana Anda dapat menggunakan penyortiran (pertama / foreach).
sumber