📜  从向量中选择随机元素而不重复并添加到另一个向量 c++ - TypeScript (1)

📅  最后修改于: 2023-12-03 15:06:34.404000             🧑  作者: Mango

从向量中选择随机元素而不重复并添加到另一个向量

简介

在C++和TypeScript中,需要从一个向量中随机选择不重复的元素,并将它们添加到另一个向量中。这在很多应用场景中都有着重要的作用,如序列乱序、抽奖等。

实现
C++

在C++中,可以使用STL库的random_shufflevector来实现。random_shuffle用于将向量中的元素随机打乱,而vector则用于存储元素。

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
  std::vector<int> source {1, 2, 3, 4, 5};
  std::vector<int> result {};

  std::random_shuffle(source.begin(), source.end());
  for (auto it = source.begin(); it != source.end() && result.size() < 3; ++it) {
    result.push_back(*it);
  }

  for (auto it = result.begin(); it != result.end(); ++it) {
    std::cout << *it << " ";
  }

  return 0;
}

上面的程序将源向量{1, 2, 3, 4, 5}中的元素随机打乱,并将前三个不重复的元素添加到结果向量中。输出结果为4 1 3

TypeScript

在TypeScript中,可以使用Arrayslicesplice方法来实现。slice方法用于复制数组中指定范围的元素,而splice方法则用于在数组中添加或删除元素。

const source: number[] = [1, 2, 3, 4, 5];
const result: number[] = [];

source.sort(() => Math.random() - 0.5);
for (let i = 0; i < 3 && i < source.length; ++i) {
  result.push(source[i]);
  source.splice(i, 1);
}

console.log(result);

上面的代码将源数组[1, 2, 3, 4, 5]中的元素随机打乱,并将前三个不重复的元素添加到结果数组中。输出结果为[2, 4, 1]

总结

无论是C++还是TypeScript,都可以轻松地从一个向量中选择随机元素而不重复地添加到另一个向量中。这种方法简单易用,可用于众多应用场景,并有很大的灵活性。