通过字符串属性快速查找对象

3

我有一个任务,需要快速通过对象的字符串属性查找对象。

对象:

  class DicDomain
  {
    public virtual string Id{ get; set; }
    public virtual string Name { get; set; }
  }

我使用List[T]字典来存储我的对象,其中T目前是DicDomain。 我有5-10个这样的列表,每个列表包含大约500-20000个对象。 任务是通过名称查找对象。 我现在使用如下代码:

  List<T> entities = dictionary.FindAll(s => s.Name.Equals(word, StringComparison.OrdinalIgnoreCase));

我有一些问题:

我的搜索速度是否达到最优?我认为现在已经很好了。

  1. 数据结构。使用链表(List)是否适合这个任务?哈希表(hashtable)、排序等呢?
  2. 查找方法。也许我应该使用字符串内部化(string intern)吗?

我在这些任务方面没有太多经验。你能给我一些提高性能的好建议吗? 谢谢

1个回答

5
如果您经常执行此操作,可以构建一个Dictionary<string,List<DicDomain>>(如果Name是唯一的,则为Dictionary<string,DicDomain>),以构建反向映射(从名称到一堆DicDomain对象),并保持该字典最新。

之后,任务将是一个简单的哈希表查找:

 var list = dictionary[name];

每天频繁地执行100000次。感谢建议!我无法想象有这么好的方法。那么字典和哈希表呢? - Andrew Kalashnikov
@Andrew:简短回答:Dictionary。长篇回答请看:https://dev59.com/SnNA5IYBdhLWcg3wHp6B#1089142 - Mehrdad Afshari
StringComparison.OrdinalIgnoreCase和这个怎么样?我该如何实现大小写不敏感的搜索? - Andrew Kalashnikov
@Andrew: 你可以将StringComparer.OrdinalIgnoreCase传递给Dictionary构造函数,以控制键的比较方式。 - Mehrdad Afshari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接