我使用SortedDictionary<Key, Value>
来存储Key
的排序列表,但不要小心存储Value
s 。 Key
有一组唯一性标准,另一套用于排序(即GetHashValue()
和Equals(Object obj)
使用的属性与CompareTo(Key key)
使用的属性不同。 / p>
我知道它只存储Value
的引用,因此内存使用量很小。在我的用例中,我永远不需要访问字典中存储的Value
部分{/ 1}}。
是否有一些约定指定在这些情况下KeyValuePair<Key, Value>
使用哪种对象?我目前正在为Value
和Key
使用相同的对象,即类型为Value
,而我使用Dictionary<Key, Key>
添加.Add(key, key)
对象。
同样的问题适用于SortedList<Key, Value>
,但在这种情况下我需要SortedDictionary<Key, Value>
的插入效果。
答案 0 :(得分:3)
如果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>
应该很简单。