gpt4 book ai didi

dictionary - 如何从 es6 Map 或 Set 中获取随机项目

转载 作者:行者123 更新时间:2023-12-03 06:48:06 27 4
gpt4 key购买 nike

我有一个使用对象数组的项目,我正在考虑将其迁移到 es6 Sets 或 Maps。

我需要快速从它们中获取一个随机项目(对于我当前的数组来说显然微不足道)。我该怎么做?

最佳答案

map 和集合不太适合随机访问。它们是有序的并且长度已知,但它们没有通过顺序索引进行索引以供访问。因此,要获取 Map 或 Set 中的第 N 个项目,您必须迭代它才能找到该项目。

从集合或映射中获取随机项目的简单方法是获取键/项目的整个列表,然后选择一个随机项目。

// get random item from a Set
function getRandomItem(set) {
let items = Array.from(set);
return items[Math.floor(Math.random() * items.length)];
}
<小时/>

您可以制作一个同时适用于 Set 和 Map 的版本,如下所示:

// returns random key from Set or Map
function getRandomKey(collection) {
let keys = Array.from(collection.keys());
return keys[Math.floor(Math.random() * keys.length)];
}

这显然不适用于大型 Set 或 Map,因为它必须迭代所有键并构建一个临时数组才能选择一个随机键。

<小时/>

由于 Map 和 Set 都有已知的大小,因此您还可以纯粹根据 .size 属性选择随机索引,然后您可以迭代 Map 或 Set,直到达到所需的第 N 项。对于大型集合,这可能会更快一些,并且可以避免以更多代码为代价创建临时键数组,尽管平均而言它仍然与集合的 size/2 成比例。

// returns random key from Set or Map
function getRandomKey(collection) {
let index = Math.floor(Math.random() * collection.size);
let cntr = 0;
for (let key of collection.keys()) {
if (cntr++ === index) {
return key;
}
}
}

关于dictionary - 如何从 es6 Map 或 Set 中获取随机项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42739256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com