如何对数组进行一次随机迭代,然后按照该顺序重复迭代

3
这是我的数组:arr = [0, 1, 2, 3, 4, 5],我想第一次随机遍历它,然后每次以相同(随机)的顺序遍历它。我应该怎么做呢?我能想到的唯一方法是对arr进行洗牌,使用类似此洗牌函数,然后按顺序遍历。例如:
newArr = shuffle(arr);
for(j = 0; j <5; j++) {
    for(i = 0; i < newArr.length; i++)
}

我想知道是否有更简单、内联的方法,这样如果项目被添加到数组中,我就不必重新洗牌(并每次都创建一个新的array)。


但是当您更改数组时,序列也会发生变化,因此洗牌似乎是个好主意。 - Alex
2个回答

1
我相信这里没有内置函数可以做到这一点。 因此,创建一个与数组大小相同的整数列表,并将它们分配为0..count-1。然后从列表中随机选择一个数字(范围是0到列表大小-1),并删除该位置上的数字并将其添加到新的(第二个)列表中。重复此步骤,直到第一个列表为空。第二个列表将是原始范围的随机偏移量集合。

0
创建第二个数组。接下来,用随机数(范围从0到array.length)填充该数组。现在创建一个for循环来遍历第二个数组。数组中的每个数字都对应于array中的一个索引。
结果:现在您可以随机遍历array而不改变array的顺序。
稍后,您可以使用splice()函数在随机点添加到第二个数组中(并使用push()将其添加到主要的array中)。

这是我想到的主意,但是如果我用随机数填充第二个数组,有可能会出现重复的数字,也有可能会漏掉某些数字(例如数字2可能会被随机生成两次)……对吗? - Startec
@Startec 您需要在随机生成器 while 循环内添加第二个 for 循环,以检查是否生成了任何重复的数字。我以前做过一些像 Java 随机地图生成器这样的随机数生成。如果您愿意,我可以用一些伪代码扩展这个答案。 - Jason
不需要,最好的方法似乎是打乱数组,然后顺序循环。 - Startec
@Startec 哦,是的,洗牌可能更好。我想得太复杂了。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接