要避免从两个不同的随机变量中获得相同的值,同时这些值来自同一个列表,你可以采用以下几种方法:
Fisher-Yates 洗牌算法可以用来随机打乱一个数组的顺序,从而确保每次获取的值都是随机的且不重复。
function shuffle(array) {
let currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
const values = [1, 2, 3, 4, 5];
const shuffledValues = shuffle(values);
const randomVariable1 = shuffledValues[0];
const randomVariable2 = shuffledValues[1];
Set 是一种集合数据结构,它可以帮助你确保元素的唯一性。
const values = [1, 2, 3, 4, 5];
const randomVariable1 = Math.floor(Math.random() * values.length);
const randomVariable2 = Math.floor(Math.random() * values.length);
while (randomVariable1 === randomVariable2) {
randomVariable2 = Math.floor(Math.random() * values.length);
}
const uniqueValues = new Set([values[randomVariable1], values[randomVariable2]]);
你可以编写一个递归函数来确保两个随机变量不相同。
function getRandomValues(values, count = 2) {
if (count === 1) {
return values[Math.floor(Math.random() * values.length)];
}
const randomIndex = Math.floor(Math.random() * values.length);
const randomValue = values[randomIndex];
const remainingValues = values.filter((_, index) => index !== randomIndex);
const nextRandomValue = getRandomValues(remainingValues, count - 1);
return [randomValue, ...nextRandomValue];
}
const values = [1, 2, 3, 4, 5];
const [randomVariable1, randomVariable2] = getRandomValues(values);
这种方法广泛应用于需要随机分配资源、生成唯一标识符、随机抽样等场景。例如,在游戏开发中,你可能需要随机分配角色或物品;在数据分析中,你可能需要随机抽样数据进行分析。
通过以上方法,你可以有效地避免从两个不同的随机变量中获得相同的值,同时这些值来自同一个列表。
领取专属 10元无门槛券
手把手带您无忧上云