为大范围整数生成随机顺序的智能方法?

时间:2014-03-23 13:40:58

标签: javascript random colors

我想为0到256 ^ 3之间的整数生成一个随机顺序(以便随机获取所有颜色),所以我现在正在使用这种方式:

var c = [],
    j = 0;

//enum
for (;j<16777216;j++)   c[j] = j;

//calculate random elements faster
for(;c.length;c.splice(j,1)) {
    j = Math.floor(Math.random() * c.length);
    //every j is a random number between 0 and 256^3
}

生成所有数字需要很长时间......你知道一种更好的时间性能来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您现在使用的代码存在一些问题。

  1. 它没有重新排序数组中的值,而是根据数组大小的变化生成随机值。这并不能保证生成的序列中不会有重复的值。 (事实上​​,除了最小的数组大小之外,你肯定会有重复数据。)

  2. 这不是随机的。随着数组大小的缩小,序列末尾生成的值也会缩小。 (在第0次迭代之后,不能再生成值16777216。每次迭代都会消除一个新值。)

  3. 正如您已经指出的那样,它很慢。你花了很多时间从splice函数返回新的数组值,你只需要在每次迭代时抛弃它。您最好使用How to randomize (shuffle) a javascript array?

  4. 中给出的方法将数组c中的值进行随机播放