You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对多维Int数组无重复两两比对,并用高阶函数找交集数组?

多维Int数组无重复两两比对并筛选交集数组的高阶函数实现

当然可以用reduce、map、filter这类高阶函数配合闭包完成需求,核心思路是通过索引规则避免重复比对,再利用Set高效判断交集。以下是具体实现步骤和代码示例(以Swift为例):

步骤1:预处理数组,转换为Set提升效率

先将多维数组中的每个子数组转换为Set,因为Set的交集判断操作比原生数组更高效,尤其当子数组元素较多时:

let myArr = [[1,2,3], [4,5], [3,6], [7,8,9], [5,10]]
let setArray = myArr.map { Set($0) }

步骤2:生成无重复的索引对

利用reduce生成所有i < j的索引组合,确保每对数组只比对一次:

let validIndexPairs = (0..<myArr.count).reduce(into: [(Int, Int)]()) { result, i in
    // 从i+1开始遍历,彻底避免重复比对
    (i+1..<myArr.count).forEach { j in
        result.append((i, j))
    }
}

步骤3:筛选存在交集的数组对

用filter判断对应Set是否存在交集,再通过map映射回原数组的子数组对:

let overlappingArrayPairs = validIndexPairs.filter { i, j in
    // isDisjoint返回true表示无交集,取反即为存在共同数字
    !setArray[i].isDisjoint(with: setArray[j])
}.map { i, j in
    (myArr[i], myArr[j])
}

结果说明

上述代码运行后,overlappingArrayPairs会包含所有符合要求的无重复数组对:

  • ([1,2,3], [3,6])
  • ([4,5], [5,10])

如果只需要保留索引对而非实际数组元素,去掉最后的map步骤即可。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 18:44:51