求助:Swift中判断两个数组是否存在相同元素(含示例)
Swift判断两个数组是否存在任一相同元素
嘿,这个需求挺常见的,我给你整理了几种实用的实现方案,你可以根据自己的场景来选:
方案一:利用Set的交集操作(推荐,高效)
Set在元素查找和交集判断上效率很高,平均时间复杂度是O(n),适合大多数场景,尤其是数组元素较多的时候:
let array1 = [1,2,3,4] let array2 = [1,5,6,7,8] func hasCommonElement(_ array1: [Int], _ array2: [Int]) -> Bool { let elementSet = Set(array1) // isDisjoint(with:) 判断两个集合是否完全没有交集,取反就得到是否有共同元素 return !elementSet.isDisjoint(with: array2) } // 测试调用 print(hasCommonElement(array1, array2)) // 输出:true
如果你的数组元素是自定义类型,只需要让该类型遵守Hashable协议(Swift基础类型都默认遵守了),这个方法同样适用。
方案二:使用高阶函数contains
要是你不想用Set,也可以用数组的contains方法结合闭包实现,逻辑很清晰:
func hasCommonElement(_ array1: [Int], _ array2: [Int]) -> Bool { // 优先遍历较短的数组,减少查找次数,提升一点效率 let shorter = array1.count <= array2.count ? array1 : array2 let longer = array1.count > array2.count ? array1 : array2 return shorter.contains { element in longer.contains(element) } } print(hasCommonElement(array1, array2)) // 输出:true
不过这个方法的时间复杂度是O(n*m),如果数组规模很大,效率会比Set方案低不少。
方案三:手动双重遍历(适合理解底层逻辑)
如果想更直观地理解判断逻辑,可以用双重循环手动遍历检查:
func hasCommonElement(_ array1: [Int], _ array2: [Int]) -> Bool { for element in array1 { for compareElement in array2 { if element == compareElement { // 找到共同元素立刻返回,不用继续遍历 return true } } } // 遍历完都没找到,返回false return false } print(hasCommonElement(array1, array2)) // 输出:true
这种方法逻辑最直白,但效率也是O(n*m),只推荐在小规模数组或者需要自定义判断逻辑的场景下使用。
内容的提问来源于stack exchange,提问作者Jananni M
相关产品推荐
相关产品推荐

