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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:23:10