我有这种方法来生成新的数值,但它需要很长时间才能完成该功能。 如何快速生成随机数?如何生成给定数值数组中不存在的数值?
public int GeneratenewID(int[] OptionId)
{
Random ran = new Random();
int SearchId = ran.Next(1, OptionId.Length*2);
if (!OptionId.Contains(SearchId))
{
return SearchId;
}
else
{
return GeneratenewID(OptionId);
}
}
这是几乎可以肯定是一个破碎的洗牌算法。 Google“c#fisher yates shuffle”。 –
退一步说明**为什么**你认为你需要这个。这味道像一个XY问题 - https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem。 – mjwills
将'Random ran = new Random();'从函数中取出,并为随机实例使用一个类字段。随机空构造函数使用系统时间作为种子需要很长时间,而在递归方法中,它会在系统时间改变之前运行几次,所以它会一遍又一遍地产生相同的数字。 –