2013-10-09 35 views
0
var dd = new Dictionary<Guid, object>(); //readonly in my real code 
dd.Add(Guid.NewGuid() , 'a'); 
dd.Add(Guid.NewGuid() , 'a'); 
dd.Add(Guid.NewGuid() , 'a'); 
var randone = dd.ElementAt(new Random(dd.Count()).Next(dd.Count)); 

我想從dd中儘可能快地得到一個隨機值(每ms計數),但我非常肯定我沒有這樣做與上述示例。如何重新獲得一個隨機的KeyValuePair?在實際的代碼中,密鑰實際上是一個GUID,但值是一個自定義的POCO。來自Dictionary的隨機值?

+5

播種'隨機'與項目的數量將導致你做一個明確*非*隨機結果。 –

回答

2

如果你可以保留所有的密鑰在List<T>那麼你可以選擇一個介於0和List.Count之間的隨機數。使用該數字索引到列表中(簡單查找),然後使用它索引到您的字典中。

+0

我的實際代碼有很多字典,每個都有數千個k/v對,所以不會複製列表中的所有密鑰會增加額外的開銷? – Snowy

+0

這是一個權衡,記憶的速度。這會增加額外的內存開銷,但如果速度是您最關心的問題,那麼這是您的最佳選擇。我會爭辯說,這可能會增加的內存開銷可能非常小。 – BFree