首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListDictionary类有没有通用的替代类?

ListDictionary类有没有通用的替代类?
EN

Stack Overflow用户
提问于 2009-08-05 18:11:11
回答 5查看 7K关注 0票数 18

我查看了一些示例代码,其中使用了一个ListDictionary对象来存储少量数据(大约5-10个对象,但这个数字可能会随着时间的推移而变化)。我使用这个类的唯一问题是,与我所做的其他所有事情不同的是,它不是泛型的。这意味着,如果我错了,请纠正我,每次我从这里获取一个对象,或者枚举它的时候,都会进行强制转换。较大的Dictionary<T>对象中是否有足够的开销来调整非泛型ListDictionary的开销

将使用此对象的代码将在每次页面加载时被枚举,我猜这就是为什么使用ListDictionary类而不是其他替代类的原因。这也是为什么我想从这个数据列表中获得最大的性能。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-05 18:16:26

不幸的是,没有ListDictionary的通用等价物。

然而,实现一个应该不是很困难。ListDictionary本质上是通过保存键/值对的链表并迭代它们进行查找操作来工作的。您可以通过使用一些非常简单的LINQ表达式包装LinkedList<T>来构建ListDictionary<TKey,TValue>

例如

代码语言:javascript
复制
public class LinkedDictionary<TKey,TValue> {
  private LinkedList<KeyValuePair<TKey,TValue>> _list = new LinkedList<KeyValuePair<TKey,TValue>>();
  private IEqualityComparer<TKey> _comp = EqualityComparer<TKey>.Default;

  public void Add(TKey key, TValue value) { 
    _list.Add(new KeyValuePair<TKey,TValue>(key,value)); 
  }
  public TValue Get(TKey key) {  
    return _list.Where(x => _comp.Equals(x.Key,key)).First().Value;
  }
  ...
}
票数 12
EN

Stack Overflow用户

发布于 2009-08-05 18:15:41

如果存储在ListDictionary中的数据总是对象(类),而不是值类型,那么它可能会比字典更快。如果您要存储值类型(structs、int、double等),那么装箱/拆箱的成本很可能会平衡一切,我建议您使用字典。

但是,总的来说,我要指出的是,这两者之间的性能差异可能是您的总体性能问题中最小的。当涉及到性能优化时,像这样的小事情通常是最不需要担心的。在关心ListDictionary和字典之间的微小性能差异之前,应该首先解决更大规模的事情,如进程间调用、数据库和web服务交互等。

票数 4
EN

Stack Overflow用户

发布于 2017-03-24 05:42:06

没有ListDictionary的通用等价物。

如果您对这个小字典的使用不是由AddRemove主导的,那么您可以考虑SortedList,尽管它的名称是IDictionary<TKey, TValue>,但它实现了IDictionary<TKey, TValue>。与由单链表支持的ListDictionary不同,SortedList由一个排序的键数组和一个数组值支持。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1234831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档