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

如何优雅地找出两个结构体数组属性匹配项并移除匹配元素?

优雅实现结构体数组按属性匹配移除元素

要高效完成这个需求,核心思路是先把待匹配的属性提取成集合(Set),利用集合O(1)的查找效率,再结合filter方法过滤数组,完全不需要嵌套for循环:

  1. 第一步:提取arr2中所有name值存入Set,集合的查找性能远优于数组
  2. 第二步:用filter过滤arr1,保留那些name不在上述集合中的元素

具体代码实现如下:

struct Example { var name: String }

var arr1 = [Example(name: "Sam"), Example(name: "Ash"), Example(name: "Mike")]
var arr2 = [Example(name: "David"), Example(name: "Sam"), Example(name: "Leonard")]

// 提取arr2的name集合
let excludedNames = Set(arr2.map { $0.name })
// 过滤arr1,移除匹配name的元素
arr1 = arr1.filter { !excludedNames.contains($0.name) }

// 输出结果:[Example(name: "Ash"), Example(name: "Mike")]
print(arr1)

这种方式的优势:

  • 时间复杂度从嵌套循环的O(n*m)降到O(n+m),性能更优
  • 代码简洁易读,完全符合Swift的函数式编程风格
  • 不需要手动写for循环处理元素,避免冗余代码

如果需要处理更复杂的属性匹配,也可以基于这个思路扩展,比如匹配多个属性时,把属性组合成元组存入Set即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:43