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

如何计算字符串二维数组的元素交集?

获取字符串二维数组的所有子数组值交集(Swift实现)

给定字符串类型的二维数组,需要找出所有子数组中共同存在的元素(值层面的交集)。以下是示例场景:

示例输入

let arrayOfArrayOfStrings =
[
    ["J", "C", "A", "E"],
    ["A", "C", "J", "E"],
    ["R", "J", "A", "E"]
]

预期输出

["A", "E", "J"](顺序可按需调整)


解决方案一:利用Set的交集特性

Swift的Set原生支持交集运算,是处理这类问题最简洁的方式。通过逐步求交集的方式,可快速得到所有子数组的共同元素。

let arrayOfArrayOfStrings =
[
    ["J", "C", "A", "E"],
    ["A", "C", "J", "E"],
    ["R", "J", "A", "E"]
]

// 处理二维数组为空的边界情况
guard let firstSubarray = arrayOfArrayOfStrings.first else {
    print("二维数组为空,无交集元素")
    return
}

// 初始交集集合为第一个子数组的元素集合
var commonSet = Set(firstSubarray)

// 遍历剩余子数组,逐步求交集
for subarray in arrayOfArrayOfStrings.dropFirst() {
    commonSet = commonSet.intersection(subarray)
    // 提前终止:如果交集为空,无需继续遍历
    if commonSet.isEmpty {
        break
    }
}

// 转成有序数组(匹配预期输出顺序)
let result = commonSet.sorted()
print(result) // 输出 ["A", "E", "J"]

说明

  • 先处理边界情况:如果二维数组为空,直接返回提示。
  • 以第一个子数组的元素集合作为初始交集,依次和后续子数组的元素求交集。
  • 可提前终止遍历:若中途交集变为空,后续子数组不会改变结果,直接跳出循环提升效率。
  • 通过sorted()将无序的Set转为有序数组,匹配预期输出的顺序。

解决方案二:统计元素出现的子数组次数

如果不想依赖Set,也可以通过统计元素在子数组中的出现次数筛选交集元素——只有在所有子数组中都出现的元素,其出现次数才等于子数组的总数。

let arrayOfArrayOfStrings =
[
    ["J", "C", "A", "E"],
    ["A", "C", "J", "E"],
    ["R", "J", "A", "E"]
]

let totalSubarrays = arrayOfArrayOfStrings.count
var elementOccurrence = [String: Int]()

// 统计每个元素在多少个不同的子数组中出现
for subarray in arrayOfArrayOfStrings {
    // 子数组去重,避免同一子数组内重复元素重复计数
    let uniqueElements = Set(subarray)
    for element in uniqueElements {
        elementOccurrence[element, default: 0] += 1
    }
}

// 筛选出在所有子数组中都出现的元素
let commonElements = elementOccurrence.filter { $0.value == totalSubarrays }.keys
// 转成有序数组
let result = commonElements.sorted()
print(result) // 输出 ["A", "E", "J"]

说明

  • 遍历每个子数组时先转成Set去重,确保每个子数组对元素的计数只算一次。
  • 最后筛选出计数等于子数组总数的元素,这些就是所有子数组的共同元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:06