2010-04-29 39 views
3

我有一個巨大的集合(我可以使用OfType對象的OfType <>())進行強制轉換。這些對象中的每一個都有一個Category屬性,該屬性從應用程序中其他位置的列表中繪製。這個集合可以達到數百個項目的大小,但可能只有6/30個可能的類別被實際使用。找到這6個類別的最快方法是什麼?龐大集合的大小不利於我反覆遍歷整個事物並返回所有獨特的值,那麼是否有更快的方法來完成這一點?快速檢索C#中巨大集合中使用的屬性的子集

理想情況下,我會收集類別到List<string>

+2

幾百?我會將「數百」項目的內存集合分類爲* tiny *,而不是* huge *。我將一個內存集合分類爲數十萬個項目,例如* huge *。 – 2010-04-29 14:52:31

+0

我想從代碼角度來看內存對象本身,1600+項目可能看起來不那麼大。但是我可能會略微有些恐懼,因爲它們每個都是1-4MB的文件,所以從這個角度看它很大。但要引用該類別,我不需要檢索該文件。 – 2010-04-29 14:57:25

回答

2

如果您使用的是.NET 3.5那就試試這個:

List<string> categories = collection 
    .Cast<Foo>() 
    .Select(foo => foo.Category) 
    .Distinct() 
    .ToList(); 

它應該是非常快的。

我假設這些對象最初來自數據庫?如果是這樣,那麼你可能想要問數據庫爲你做這項工作。如果該列上有一個索引,那麼即使沒有將對象提取到內存中,您也會立即得到結果。

+0

文件集合和類別列表都存儲在數據庫中,是的。但是,這些文件的類別列沒有編入索引,我不允許對其進行修改。這個LINQ看起來應該是訣竅,很可能。 – 2010-04-29 14:55:29

0

的巨大集合的大小阻止我從對面的整個事情迭代和返回所有唯一值

恐怕才能找到所有使用過的類別,你將不得不尋找在每個項目一次,所以你很難避免迭代(除非你在構建你的集合時跟蹤使用的類別)。

試試Mark Byers解決方案對於您來說是否足夠快,如果不是,那麼只擔心它的性能。