2011-05-18 56 views
0

我希望在任何時候都有大約20,000個複雜對象坐在內存中(應用程序將以無限循環運行)。我正在考慮使用List<MyObject>,然後將列表轉換爲Dictionary<int, MyObject>或者只是避免列出alltogether並將對象保留在字典中。我想知道,每次我需要查找對象時,將列表轉換爲字典是否昂貴?什麼會更好?讓他們隨時保存爲字典嗎?或者讓List和使用lambda來獲取所需的對象?或者我應該看看其他選項?在內存中保留相當數量的複雜對象

請注意,當對象檢索導致出隊時,我不需要排隊或堆棧行爲。

在此先感謝。

+0

爲什麼不是一個集? – 2011-05-18 01:55:38

+0

http://stackoverflow.com/questions/183685/c-set-collection/183696#183696 – Dimitri 2011-05-18 02:01:22

回答

2

對列表使用lambda查找的是O(N),對於20,000個項目而言並不值得考慮。然而,如果你知道你總是需要通過一個已知的鍵來獲取對象,那麼你可以使用一個O(1)的字典 - 這與算法一樣快。因此,如果有某種方法可以構建數據/應用程序,以便可以基於某種可預測,可重複,唯一的密鑰進行檢索,從而最大限度地提高性能。最糟糕的事情(從性能角度來看)是針對列表的一些複雜的查找例程,但有時它是不可避免的。

+0

有沒有一種方法可以讓字典有兩個鍵,並通過這些鍵中的任何一個來查找?我嘗試過元組,但它們都需要元組項的兩個值。 – Dimitri 2011-05-18 02:34:08

+0

@Dimitri保留三種字典 - 「Dict ','Dict '和'Dict '。查找爲'commonDict [key2Dict [key]]' – 2011-05-18 02:46:34

+0

@Dmitri,根據你的需要,你可以推出你自己的集合類來支持這個。有關可能的想法,請參見http://stackoverflow.com/questions/5382299/retrieval-of-items-from-custom-collection/5382893#5382893。 – 2011-05-18 02:47:46

2

無論你在做什麼,如果你需要訪問List,那麼你將需要循環查找任何你想要的。

如果您需要訪問Dictionary,那麼你必須使用鍵值立即獲取你在找什麼,或者,如果你必須的選項,您仍然可以通過DictionaryValues循環。請使用Dictionary