当您不关心值时,是否有使用 C# 的 SortedDictionary<Key, Value> 的常用样式?
Is there a usual style for using C#'s SortedDictionary<Key, Value> when you don't care about the value?
我正在使用 SortedDictionary<Key, Value>
存储 Key
的排序 列表 ,但不关心存储 Value
秒。 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>
应该很简单。
我正在使用 SortedDictionary<Key, Value>
存储 Key
的排序 列表 ,但不关心存储 Value
秒。 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>
应该很简单。