问题描述
我正在 Photoshop 脚本中实现 Fisher-yates shuffle。我想从最多大约 99999 个中创建一个包含 n
唯一随机元素的数组。其中 n
是一个很小的值,但可以达到最大值。
最多一千以下这很好(以毫秒为单位运行),但对于 10,000(大约 20 秒)要慢得多。
有没有更好/更快的方法来做到这一点?请记住,它需要在 ECMAScript 中。
var maxNumber = 99;
var numToGenerate = 5;
var bigShuffle = shuffle(maxNumber);
var randomNumbers = bigShuffle.slice(0,numToGenerate);
alert(randomNumbers);
function shuffle(m)
{
var temp;
var rnd;
// create an empy array
var arr = new Array();
for(var i = 0 ; i < m; i++)
{
arr.push(i);
}
while (m)
{
rnd = Math.floor(Math.random() * m-=1);
// And swap it
temp = arr[m];
arr[m] = arr[rnd];
arr[rnd] = temp;
}
return arr;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)