c# ' SortedDictionary当你不关心值的时候
本文关键字:不关心 当你 Value SortedDictionary Key | 更新日期: 2023-09-27 17:50:24
我使用SortedDictionary<Key, Value>
来存储Key
s的排序列表,但不关心存储Value
s。Key
有一组唯一性标准和另一组排序标准(即GetHashValue()
和Equals(Object obj)
使用的属性与CompareTo(Key key)
使用的属性不同)。
我知道它只存储对Value
的引用,所以内存使用很小。在我的用例中,我永远不需要访问字典中存储的KeyValuePair<Key, Value>
的Value
部分。
在这些情况下,是否有一些约定指定Value
使用哪种对象?我目前使用相同的对象为Key
和Value
,也就是说,类型是Dictionary<Key, Key>
,我使用.Add(key, key)
来添加对象。
同样的问题也适用于SortedList<Key, Value>
,但在这种情况下,我需要SortedDictionary<Key, Value>
的插入性能。
如果Value
是引用类型,则存储它将浪费4到8个字节,具体取决于进程是32位还是64位。如果Value
是一个值类型,它可能会浪费更多。
如果不需要,可以将Value
设置为Byte
。即使使用空结构体,也不能低于1字节。您可以设置为任何值,可能0是一个不错的选择。
理想情况下,如果你只需要一个集合,你应该使用集合。
在。net 4.0+中有一个SortedSet<T>
在内部使用树。事实上,SortedDictionary<TKey, TValue>
在内部使用SortedSet<KeyValuePair<TKey, TValue>>
。
SortedList<TKey, TValue>
的集合对应是List<T>
,我猜。您只需要使用二分搜索并将值插入排序位置。实现ISet<T>
应该很简单。