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

m3n*_*tat 2 c# arrays random random-access

我有一个双值"vals"数组,我需要随机索引到这个数组并获得一个值.GenRandomNumber()返回0和1,但从来没有0或1.我使用Convert.ToInt32基本上得到一切我小数点左边的数字,但必须有这样做的更有效的方法?

这是我的代码:

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

谢谢

更新

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

更新2

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

public int Next(int maxValue)
Run Code Online (Sandbox Code Playgroud)

如果我把它称为vals [rand.Next(vals.length-1)]那应该做对吗?我也看到MersenneTwister有一个构造函数:

public MersenneTwister(int[] init)
Run Code Online (Sandbox Code Playgroud)

不知道这是为了什么,我可以用它来预先填充我提供0到vals.length数组的可接受的随机数吗?

FYI vals是一个长度为1048576的双重数组,用于划分正态分布曲线.我基本上使用这种机制来尽可能快地创建正态分布的数字,monte carlo模拟每天使用数十亿个正态分布的随机数,所以每一点都有帮助.

Dan*_*ton 9

请尝试使用随机整数:

Random random = new Random();
int randomNumber = random.Next(0, vals.Length);
return vals[randomNumber];
Run Code Online (Sandbox Code Playgroud)