当您不关心值时,是否有使用 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 使用哪种对象?我目前对 KeyValue 使用相同的对象,也就是说,类型是 Dictionary<Key, Key> 而我正在使用 .Add(key, key) 添加对象。

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

如果Value是引用类型,存储它会浪费 4 到 8 个字节,具体取决于进程是 32 位还是 64 位。如果Value是值类型,可能会浪费更多。

如果不需要,可以设置ValueByte。即使结构为空,也不能低于 1 个字节。您可以设置为任何值,可能 0 是一个不错的选择。

理想情况下,如果您只需要一套,就应该使用一套。

.NET 4.0+ 中有一个在内部使用树的 SortedSet<T>。事实上,SortedDictionary<TKey, TValue> 在内部使用 SortedSet<KeyValuePair<TKey, TValue>>

我猜 SortedList<TKey, TValue> 的对应集合是 List<T>。您只需要使用二进制搜索并将值插入排序位置。实施 ISet<T> 应该很简单。