c#随机索引到数组的最快方法

标签 c# arrays random random-access

我有一个 double 值数组“vals”,我需要随机索引到这个数组中并获取一个值。 GenRandomNumber() 返回一个介于 0 和 1 之间的数字,但从不返回 0 或 1。我使用 Convert.ToInt32 基本上将所有内容都放在我的小数点左侧,但必须有更有效的方法来做到这一点吗?

这是我的代码:

public double GetRandomVal()
{
   int z = Convert.ToInt32(GenRandomNumber() * (vals.Length));
   return vals[z];
}

谢谢

更新

感谢所有回复的人,但我不得不使用提供的 MersenneTwister 随机数实现,该实现具有方法 rand.NextDouble()

更新 2

再考虑一下,我需要做的就是生成一个介于 0 和 array.length-1 之间的随机数,然后使用它随机索引到数组中。 vals 长度为 2^20 = 1048576,因此生成一个随机 int 就足够了。我注意到我的 MersenneTwister 有一个方法:

public int Next(int maxValue)

如果我像 vals[rand.Next(vals.length-1)] 这样调用它应该正确吗?我还看到 MersenneTwister 有一个构造函数:

public MersenneTwister(int[] init)

不确定这是做什么用的,我可以使用它来预填充可接受的随机数,我为其提供一个 0 到 vals.length 的数组吗?

仅供引用,vals 是一个长度为 1048576 的 double 组,用于划分正态分布曲线。我基本上是在使用这种机制尽可能快地创建正态分布的数字,蒙特卡洛模拟每天使用数十亿个正态分布的随机数,所以一点点帮助。

最佳答案

尝试使用随机整数:

Random random = new Random();
int randomNumber = random.Next(0, vals.Length);
return vals[randomNumber];

关于c#随机索引到数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154879/

相关文章:

ruby-on-rails - 将数组作为表列推送到数组,然后保存模型

php - 如何将 XML 文件转换为 SimpleXMLElement() 数组?

python - 加快随机数据的创建

c - 没有重复数字的随机数组

c# - C# 中对 MongoDB 查询结果 (BsonDocuments) 的点表示法访问

c# - 如何在 c# WPF 框架中禁用导航快捷方式

c# - 将 "\n"转换为 SQL Server 中的实际换行符

c# - 如何监控外部网络服务?

php - Where 子句中的数组

random - 随机性的公共(public)来源