逐对检查每个数组,与其他数组逐一比对,且避免重复计数

移动开发 2026-07-09

我有一个多维整型数组。我想让每个数组都与其他数组逐一比较,但不重复进行相同的操作,比如先比较myArr[4] 与myArr[5],再比较myArr[5] 与myArr[4] 时就会重复。

我的目标是找出至少有一个数字相等的数组,这可以通过把数组转换成集合并查找它们的交集来实现。

我可以在闭包的配合下,使用像reduce、map、filter、sort这样的高阶函数吗?

解决方案

是的,你可以使用 setsmap 函数来实现,例如如下:

假设你有一个二维ArrayList

let arr = [[1, 2, 4], [4, 9, 10], [7, 8, 11], [2, 30, 50]]

let sets = arr.map { Set($0) }

for firstIdx in 0..<sets.count {
    for secondIdx in (firstIdx+1)..<sets.count {
        if !sets[firstIdx].isDisjoint(with: sets[secondIdx]) {
            print("Found matching element between one array at index \(firstIdx) and another array at index \(secondIdx)")
        }
    }
}

请注意:第二个for循环避免重复比较。因此,上面的代码将生成以下成对的比较。

(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)

不会有以下的重复比较对,如下所示

(0,1) 与 (1,0) (0,2) 与 (2,0) (1,2) 与 (2,1) ....

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章