Saya sedang membaca tentang C # ImmutableSortedDictionary
di System.Collections.Immutable
dan berpikir tentang cara menerapkannya dalam program saya. Saya sangat suka C ++ lower_bound
dan upper_bound
(lihat di sini ), dan saya agak berharap untuk melihat sesuatu semacam itu untuk rentang pencarian. Namun, metode serupa tampaknya tidak ada dalam dokumentasi . Apakah saya melewatkan sesuatu? Atau apakah MS benar-benar menyediakan kamus yang diurutkan tanpa akses yang efisien ke rentang yang diurutkan? Itu tidak persis seperti sesuatu yang bisa dilakukan pada salah IEnumerable
satu kunci seperti mengatakan metode ekstensi, jadi saya agak bingung saya tidak melihat sesuatu yang disediakan langsung oleh koleksi.
11
IBinarySearchTree<K,V>
implementasinya terlihat lebih dekat dengan apa yang saya harapkan. Aku ingin tahu apakah dia pernah mempermainkannya lebih jauh?ImmutableList<T>
kelas juga diimplementasikan sebagai pohon AVL. Dari kode sumber :/// The root node of the AVL tree that stores this set.
ImmutableList<T>
(didukung oleh pohon AVL) dibandingkanImmutableArray<T>
(didukung oleh array), menurut dokumentasi . Alasan untuk menggunakan daftar tidak berubah: 1) Memperbarui data adalah umum atau jumlah elemen tidak diharapkan kecil. 2) Memperbarui koleksi lebih penting daripada kinerja iterasi konten.Jawaban:
Sangat menjengkelkan bahwa koleksi bawaan yang tersedia tidak menawarkan serangkaian fitur lengkap (seperti metode yang
SortedDictionary
kurangBinarySearch
), memaksa kami untuk mencari solusi pihak ketiga (seperti perpustakaan C5 ).Dalam kasus Anda, alih-alih
ImmutableSortedDictionary
Anda mungkin bisa menggunakanImmutableSortedSet
, menanamkan nilai dalam kunci dan menggunakan pembanding yang sesuai. Setidaknya API dari kelas ini berisi propertiMin
danMax
.sumber
ImmutableList<T>
, diimplementasikan secara internal sebagai pohon . Jadi 10 kali lebih lambat dan mengalokasikan 12 kali lebih banyak memori daripada aList<T>
. GunakanImmutableArray<T>
sebagai gantinya.ImmutableSortedSet