【问题标题】:.NET SortedDictionary But Sorted By Values.NET SortedDictionary 但按值排序
【发布时间】:2011-02-06 19:46:08
【问题描述】:

我需要一个类似于SortedDictionary<int, double> 的数据结构,但它是根据值而不是键进行排序的。当字典中有大约 3000 个项目时,我需要大约 1-2 微秒来添加和删除项目。

我的第一个想法是简单地在我的代码中切换键和值。这几乎可以工作。通过这样做,我可以在测试中在大约 1.2 微秒内添加和删除元素。

但键在 SortedDictionary 中必须是唯一的,这意味着我的逆字典中的值必须是唯一的。在某些情况下,它们可能不是。

.NET 库中的任何想法对我有用吗?

【问题讨论】:

  • 我假设 SortedList 不符合那个性能?
  • 您能解释一下您的域中的键和值代表什么吗?
  • @Simon 我认为 SortedList 也是按键排序的。 msdn.microsoft.com/en-us/library/…
  • @John 整数代表股票标识符。双倍代表我们在每只股票中的当前风险金额(以美元计)。我需要能够随时按风险降序或风险升序遍历这些名称。并且有一些时间关键的代码会更新它,因此它确实需要能够在 1-2 微秒内完成操作。

标签: c# .net collections dictionary sorteddictionary


【解决方案1】:

PowerCollections 库有一个名为OrderedMultiDictionary<TKey, TValue> 的类,它基本上类似于SortedDictionary<TKey, TValue>,但允许重复。当您查找一个键时,您会得到一个可枚举而不是单个值。

这个库是免费的,你应该可以用那个类做你想做的事情——将值存储为键。

【讨论】:

  • 哇,太棒了!让我下载,看看它是否真的很快 1-2 我们。
  • 注意:如果您不想使用该库,您可以随时使用SortedDictionary 自己实现它,并且只需将List<T> 存储为值而不是单个T .
  • PowerCollections 库的添加/删除大约需要 30 微秒左右。非常接近,但我不确定它是否足以满足这个应用程序。不过感谢您的指点。 SortedDictionary> 也是一个好主意,让我看看我是否可以计时。我的另一个想法是只使用 SortedDictionary 添加一个微小的随机顺序项 .​​0000001 左右,这样会强制我的值是唯一的,但不会影响结果。
  • @Michael:你是如何分析这个的? AFAIK,该类使用与SortedDictionary 几乎相同的算法,它只是将列表存储为值。
  • @Aaronaught 我只是创建 3000 个随机整数和双精度数,然后使用 System.Diagnostics.Stopwatch 计时 100k 次获取值、删除和重新插入它们的试验。
【解决方案2】:

您可以像这样按值对 SortedDictionary 进行排序:

yourList.Sort(
    delegate(KeyValuePair<int, double> val1,
    KeyValuePair<int, double> val2)
    {
        return val1.Value.CompareTo(val2.Value);
    }
);

【讨论】:

  • SortedDictonary 没有排序功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 2012-03-19
  • 2021-07-14
相关资源
最近更新 更多