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

如何比较两个字符串数组并统计其中共同元素的数量?

统计两个字符串数组的共同元素数量

嘿,我来帮你搞定这个问题!你需要统计两个数组里同时出现的元素个数,而且现在还遇到了闭包元组参数的错误,对吧?先给你几个实用的解决方案,再聊聊你可能踩的坑。

方案1:用Set交集(最简洁高效)

如果你的数组里没有重复元素,用Set的intersection方法是最优解——Set的查找效率是O(1),处理大数组时比遍历判断快很多。

let array1 = ["Duck", "Dog", "Cat", "Bird", "Elephant", "Cow", "Goat", "Goose"]
let array2 = ["Eagle", "Giraffe", "Cow", "Elephant", "Sheep", "Penguin", "Rhinoceros"]

// 把数组转成Set,计算交集后取数量
let set1 = Set(array1)
let commonElements = set1.intersection(array2)
print(commonElements.count) // 输出2,和预期一致

方案2:用filter + contains(无需转Set)

如果你不想用Set,直接用数组的filter和contains方法也能实现,代码更直观:

let commonCount = array1.filter { array2.contains($0) }.count
print(commonCount) // 输出2

关于你遇到的「Closure tuple parameter '(offset: ...'」错误

这个错误大概率是你不小心用了enumerated()方法,但没正确处理它返回的元组((offset: Int, element: String))导致的。举个错误示例:

// 错误写法:用enumerated()后直接把元组传给contains
let wrongCount = array1.enumerated().filter { array2.contains($0) }.count
// 这里$0是元组,而contains需要字符串类型,所以报错

如果确实需要用到元素的索引(比如业务逻辑需要),你可以解构元组,忽略索引只取元素:

// 正确使用enumerated()的方式
let correctCount = array1.enumerated().filter { _, element in
    array2.contains(element)
}.count

额外补充:处理有重复元素的情况

如果你的数组里有重复元素(比如array1里有2个"Cow",array2里有1个),上面的方法会只算一次。如果需要统计重复元素的实际出现次数(取两个数组中该元素出现次数的最小值之和),可以用字典统计频次:

func countCommonElementsWithDuplicates(_ array1: [String], _ array2: [String]) -> Int {
    var frequencyDict = [String: Int]()
    
    // 统计第一个数组的元素频次
    for element in array1 {
        frequencyDict[element, default: 0] += 1
    }
    
    var totalCount = 0
    // 遍历第二个数组,累加最小频次
    for element in array2 {
        if var freq = frequencyDict[element], freq > 0 {
            totalCount += 1
            freq -= 1
            frequencyDict[element] = freq
        }
    }
    
    return totalCount
}

// 测试示例
let array1WithDuplicates = ["Cow", "Cow", "Elephant"]
let array2WithDuplicates = ["Cow", "Elephant", "Elephant"]
print(countCommonElementsWithDuplicates(array1WithDuplicates, array2WithDuplicates)) // 输出2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:56