如何随机组合2N个元素的数组?优雅的解法分享

21 min read

以下是一个以JavaScript为例子的方法,可以随机将2N个元素的数组两两组合:

function randomPairs(arr) {
  let len = arr.length;
  let temp, index1, index2;

  // 随机交换数组元素的位置
  for (let i = 0; i < len * 2; i++) {
    index1 = Math.floor(Math.random() * len);
    index2 = Math.floor(Math.random() * len);
    temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
  }

  // 将数组中的元素两两配对
  let pairs = [];
  for (let i = 0; i < len; i += 2) {
    pairs.push([arr[i], arr[i + 1]]);
  }
  return pairs;
}

// 测试样例
const arr = [1, 2, 3, 4, 5, 6];
const pairs = randomPairs(arr);
console.log(pairs);

这个方法首先使用随机交换数组元素的位置,打乱元素的顺序,确保后续组合的结果是随机的。然后将数组中的元素两两配对,将所有的配对结果组成一个新的数组返回。