逐对检查每个数组,与其他数组逐一比对,且避免重复计数
我有一个多维整型数组。我想让每个数组都与其他数组逐一比较,但不重复进行相同的操作,比如先比较myArr[4] 与myArr[5],再比较myArr[5] 与myArr[4] 时就会重复。
我的目标是找出至少有一个数字相等的数组,这可以通过把数组转换成集合并查找它们的交集来实现。
我可以在闭包的配合下,使用像reduce、map、filter、sort这样的高阶函数吗?
解决方案
是的,你可以使用 sets 和 map 函数来实现,例如如下:
假设你有一个二维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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。