2010-05-27 99 views
2

我有任務通過其字符串屬性快速查找對象。 對象:通過字符串屬性快速查找對象

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. 數據結構。它列出了這項任務的好處。怎麼樣散列表,排序...
  2. 方法查找。可能是我應該使用字符串實習生?

我沒有太多的這些任務exp。你能否給我提高建議以提高性能。 感謝

回答

5

如果您經常執行此操作,你可以建立一個Dictionary<string, List<DicDomain>>(或Dictionary<string, DicDomain>如果Name是唯一的)建立一個反向映射(從名字一堆DicDomain對象),並保持該詞典最新。

的任務將是後一個簡單的哈希表查找:每天

var list = dictionary[name]; 
+0

經常100000次。謝謝你的建議!!!我無法想象這麼好的方式。那麼Dictionary和HashTable呢? – 2010-05-27 08:12:10

+0

@Andrew:簡短的回答:'Dictionary'。長答案:http://stackoverflow.com/questions/1089132/net-hashtable-vs-dictionary-can-the-dictionary-be-as-fast/1089142#1089142 – 2010-05-27 08:12:51

+0

StringComparison.OrdinalIgnoreCase和這個怎麼樣。我如何實現CaseInsensetive搜索? – 2010-05-27 08:16:52