【问题标题】:Is there any alternative of Dictionary in .NET?.NET 中的 Dictionary 有什么替代品吗?
【发布时间】:2011-11-09 02:14:42
【问题描述】:

我需要在项目中使用字典,但我们知道它们只能使用键而不是索引来访问,我想使用索引来访问字典中的项目。所以我在网上摆弄了一下,发现了 OrderedDictionary,因为它们可以使用索引和键来访问,但是它们有一些 performance issue 并且因为我每天都在读/写字典,所以使用它不是一个好主意有序字典。

所以最后我在这里的问题是,是否有任何可用的替代方案可以为我提供字典的功能,我也可以使用索引访问它并且不会导致性能问题。

【问题讨论】:

  • 你知道你可以在 Dictionary 上调用 ElementAt(index) 吗?
  • 每分钟读/写字典是性能问题吗?
  • 您想通过索引访问它们还是只遍历所有项目?否则,您可以使用 Values 属性。
  • @Dominik 不确定 ElementAt(index) 在这里有多大用处。这是一个 Linq 扩展,最适用于稳定序列,并且还需要从头开始迭代序列直到达到“索引”(也许对实际上可索引的底层序列进行了优化)。枚举字典不会给出插入顺序,而且字典会重新组织以保持负载因子,这意味着顺序不稳定。
  • @S Ali 一分钟一百次更新几乎没有。

标签: c# .net performance dictionary ordereddictionary


【解决方案1】:

SortedList<TKey, TValue> 有一个属性Values,即IList<TValue>。够了吗?它只对小“组”元素很快。与SortedDictionary的区别就在这里http://msdn.microsoft.com/en-us/library/5z658b67(v=vs.80).aspx

我能问你为什么要“按索引”访问它吗?你仍然可以用 foreach 枚举它,你知道吗?

【讨论】:

  • 索引不是“稳定的”。如果插入B再插入A,A的索引为0,B的索引为1。唯一保持插入顺序的集合是OrderedDictionary(stackoverflow.com/questions/2722767/…)
  • 老问题,但如果您总是想删除第一项,那么您可能需要 System.Collections.Generic.Queue。
【解决方案2】:

响应您的评论,即您只期望每分钟更新一百次,这是很少的工作 - 几乎没有。你仍然可以使用OrderedDictionary,性能对你来说不是问题。

【讨论】:

  • 我同意你的回答,即 100 项实际上没什么……但是 100 项包括注册、登录、错误、页面访问等计数,可以是字典中任意数量的读写……而且我并不是说 OrderedDictionary 会导致性能问题......我在我的问题中写了它,但我也提到了我阅读它的帖子......我希望我能澄清我的担忧
【解决方案3】:

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多