arrays - Swift - 查找结构数组中的特定差异
问题描述
如果我有一个结构,请说:
struct Subject {
var subjectID: String?
var name: String?
var note: String?
}
我有两个这种结构的数组:Array1 和 Array2。
例如:
Array1 = [(subjectID = "T", name = "H", note = "DF"), (subjectID = "F", name = "H", note = "SD")]
Array2 = [(subjectID = "T", name "G", note = "DF"), (subjectID = "R", name = "F", note = "SDF")]
我想返回一个新数组,它由与字段Array2
匹配但具有不同和/或元素的元素子集组成。subjectID
Array1
name
note
在上面的示例中,返回的数组将是:
[(subjectID = "T", name "G", note = "DF")]
因为它包含与 in 相同subjectID
(在这种情况下T
),Array1
但name
字段不同。请注意,这个新返回数组的字段应该是原始值Array2
(例如:您不需要更正它们以匹配Array1
)
有没有一种简单的方法(例如:一两行代码)可以做到这一点而无需暴力破解?
谢谢!
解决方案
这里有很好的答案,我更喜欢保持测试简单。
首先是设置
struct Subject {
var subjectID: String?
var name: String?
var note: String?
}
let array1 = [Subject(subjectID: "T", name: "H", note: "DF"), Subject(subjectID: "F", name: "H", note: "SD")]
let array2 = [Subject(subjectID: "T", name: "G", note: "DF"), Subject(subjectID: "R", name: "F", note: "SDF")]
现在让我们看看实际的算法。返回块返回的sarray2.filter
数组。如果return中的任何s则返回。测试本身正是您所描述的。主题 ID 是否相同,名称或注释是否不同。Subject
array2
true
array1.contains
true
Subject
array1
true
let result = array2.filter { s2 in
array1.contains { s1 in
s1.subjectID == s2.subjectID && (s1.name != s2.name || s1.note != s2.note)
}
}
推荐阅读
- string - 将 String 转换为参数类型 File Flutter
- c++ - 线程共享变量是直接访问的吗?
- java - Retrieve multiple elements in an ArrayList that are closest to an integer
- python - python colorama 打印所有颜色
- flutter - Flutter - 从 FCM 收到通知时自动运行应用程序(无需单击它)
- entity-framework-core - 我可以将 Audit.NET 配置为在两个表中为一个审计事件创建审计记录吗?
- flutter - 如何使用 Flutter 为进度条颜色设置动画
- sql - 如何为每 1 个值生成一个新分区
- python - pypi 包标签与最新版本不同
- reactjs - React 当前项始终是渲染组件列表中的第一项