C# 字典中的随机值? var dd=new Dictionary()//在我的真实代码中为只读 dd.Add(Guid.NewGuid(),'a'); dd.Add(Guid.NewGuid(),'a'); dd.Add(Guid.NewGuid(),'a'); var randone=dd.ElementAt(新随机数(dd.Count()).Next(dd.Count));

C# 字典中的随机值? var dd=new Dictionary()//在我的真实代码中为只读 dd.Add(Guid.NewGuid(),'a'); dd.Add(Guid.NewGuid(),'a'); dd.Add(Guid.NewGuid(),'a'); var randone=dd.ElementAt(新随机数(dd.Count()).Next(dd.Count));,c#,random,dictionary,C#,Random,Dictionary,我希望尽可能快地从dd中获得一个随机值(每个毫秒计数),但我非常确定我没有用上面的示例来实现这一点。如何重做randone以获得随机的KeyValuePair?在实际代码中,键实际上是一个GUID,但值是一个自定义POCO。如果可以将所有键保留在列表中,则可以在0和List.Count之间选择一个随机数。使用该数字(简单查找)索引到列表中,然后使用该数字索引到词典中。对项目计数进行种子设定Random,将导致生成一个绝对不是随机的结果。我的实际代码有许多词典,每个词典都有数千个k/v对,那么,复

我希望尽可能快地从dd中获得一个随机值(每个毫秒计数),但我非常确定我没有用上面的示例来实现这一点。如何重做randone以获得随机的KeyValuePair?在实际代码中,键实际上是一个GUID,但值是一个自定义POCO。

如果可以将所有键保留在
列表中,则可以在0和List.Count之间选择一个随机数。使用该数字(简单查找)索引到列表中,然后使用该数字索引到词典中。

对项目计数进行种子设定
Random
,将导致生成一个绝对不是随机的结果。我的实际代码有许多词典,每个词典都有数千个k/v对,那么,复制列表中的所有键不会增加额外的开销吗?这是一种折衷,内存和速度。它会增加额外的开销,占用更多的内存,但如果速度是你最关心的问题,那么这是你最好的选择。我认为这可能增加的内存开销可能非常小。
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));