当您不关心价值时,是否有使用C#&#39;的SortedDictionary <key,value =“”>的通常风格?

时间:2015-05-22 02:32:45

标签: c# .net coding-style sortedlist sorteddictionary

我使用SortedDictionary<Key, Value>来存储Key的排序列表,但不要小心存储Value s 。 Key有一组唯一性标准,另一套用于排序(即GetHashValue()Equals(Object obj)使用的属性与CompareTo(Key key)使用的属性不同。 / p>

我知道它只存储Value的引用,因此内存使用量很小。在我的用例中,我永远不需要访问字典中存储的Value部分{/ 1}}。

是否有一些约定指定在这些情况下KeyValuePair<Key, Value>使用哪种对象?我目前正在为ValueKey使用相同的对象,即类型为Value,而我使用Dictionary<Key, Key>添加.Add(key, key)对象。

同样的问题适用于SortedList<Key, Value>,但在这种情况下我需要SortedDictionary<Key, Value>的插入效果。

1 个答案:

答案 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>应该很简单。