JavaScript中如何高效选取两个不重复的嵌套数组随机索引对?
实现方案
我们可以根据数据集规模选择两种不同的实现思路,都可以满足随机取2组不重复合法索引对的需求:
方案1:预生成合法索引抽样(中小数据集推荐)
先把所有合法的(index1, index2)对全部生成,再直接无放回抽样2个即可,逻辑简单不易出错,总元素数低于10万的场景都可以放心使用。
示例代码(Python)
import random data = [["a", "b", "c", "d"], ["e", "g"], ["i", "j", "k"]] # 生成所有符合边界要求的索引对 valid_indices = [(i, j) for i in range(len(data)) for j in range(len(data[i]))] # 随机抽取2个不重复的索引对 result = random.sample(valid_indices, 2) print(result)
方案2:拒绝抽样(超大数据集推荐)
如果嵌套数组规模极大,预生成所有索引对会占用过多内存,可以用随机生成+去重的方式实现,内存占用几乎为0,对于仅抽取2个样本的场景,碰撞概率极低,效率很高。
示例代码(Python)
import random def gen_random_pair(data): outer_idx = random.randrange(len(data)) inner_idx = random.randrange(len(data[outer_idx])) return (outer_idx, inner_idx) data = [["a", "b", "c", "d"], ["e", "g"], ["i", "j", "k"]] result = set() while len(result) < 2: result.add(gen_random_pair(data)) result = list(result) print(result)
注意:上述方案的“不重复”默认指两个索引对不完全一致。如果业务要求是index1互不重复或者index2互不重复,只需要在去重逻辑里增加对应判断条件即可。
内容的提问来源于stack exchange,提问作者Amine
相关产品推荐
相关产品推荐

