iOS Swift:如何根据特定属性查找不同类型数组的唯一成员
iOS Swift: How to find unique members of arrays of different types based on specific attributes
目标:我有两个不同的 classes,以及两个包含每个 class 成员的数组。使用 Swift 2.0,我想根据每个 class.
的特定属性找到一个数组与另一个数组相比的唯一成员
示例:
class A {
var name: String
init(name: String) {
self.name = name
}
}
class B {
var title: String
init(title: String) {
self.title = title
}
}
let aArray = [A(name:"1"), A(name:"2"), A(name:"3"), A(name:"4")]
let bArray = [B(title:"1"), B(title:"2"), B(title:"5")]
所以,我正在寻找 aArray 和 bArray 之间的一些操作,returns aArray 的第 3 个和第 4 个元素,因为它们在 aArray 中是唯一的,其中比较的基础是属性 A.name
和 B.title
.
当然,把运算顺序倒过来,会挑出bArray的第3个元素,因为它在bArray中是唯一的。
我知道我可以使用一个简单的 for 循环直接完成目标,但我希望有更优雅和更优化的东西。但是,如果 for 循环与任何更高级的东西一样快或更快,我也很乐意使用它。
我不确定这段代码是花哨还是优雅,但是,我们可以这样做:
let mappedArray = bArray.map { [=10=].title }
let filteredArray = aArray.filter { !mappedArray.contains([=10=].name) }
所以当我们想要来自 aArray
的唯一元素时,我们首先映射来自 bArray
的元素以获得我们想要实际比较的值的数组:
let mappedArray = bArray.map { [=11=].title }
mappedArray
只是基于 bArray
.
中对象的 title
属性 的字符串数组
接下来,我们使用filter
方法从aArray
中过滤对象。 filter
方法 returns 一个包含在我们的闭包中通过测试的对象的数组。我们要应用的测试是不包含在我们刚刚构建的映射数组中的对象。
let filteredArray = aArray.filter { !mappedArray.contains([=12=].name) }
如果我们想换一种方式,只需更改一些内容:
let mappedArray = aArray.map { [=13=].name }
let filteredArray = bArray.filter { !mappedArray.contains([=13=].title) }
目标:我有两个不同的 classes,以及两个包含每个 class 成员的数组。使用 Swift 2.0,我想根据每个 class.
的特定属性找到一个数组与另一个数组相比的唯一成员示例:
class A {
var name: String
init(name: String) {
self.name = name
}
}
class B {
var title: String
init(title: String) {
self.title = title
}
}
let aArray = [A(name:"1"), A(name:"2"), A(name:"3"), A(name:"4")]
let bArray = [B(title:"1"), B(title:"2"), B(title:"5")]
所以,我正在寻找 aArray 和 bArray 之间的一些操作,returns aArray 的第 3 个和第 4 个元素,因为它们在 aArray 中是唯一的,其中比较的基础是属性 A.name
和 B.title
.
当然,把运算顺序倒过来,会挑出bArray的第3个元素,因为它在bArray中是唯一的。
我知道我可以使用一个简单的 for 循环直接完成目标,但我希望有更优雅和更优化的东西。但是,如果 for 循环与任何更高级的东西一样快或更快,我也很乐意使用它。
我不确定这段代码是花哨还是优雅,但是,我们可以这样做:
let mappedArray = bArray.map { [=10=].title }
let filteredArray = aArray.filter { !mappedArray.contains([=10=].name) }
所以当我们想要来自 aArray
的唯一元素时,我们首先映射来自 bArray
的元素以获得我们想要实际比较的值的数组:
let mappedArray = bArray.map { [=11=].title }
mappedArray
只是基于 bArray
.
title
属性 的字符串数组
接下来,我们使用filter
方法从aArray
中过滤对象。 filter
方法 returns 一个包含在我们的闭包中通过测试的对象的数组。我们要应用的测试是不包含在我们刚刚构建的映射数组中的对象。
let filteredArray = aArray.filter { !mappedArray.contains([=12=].name) }
如果我们想换一种方式,只需更改一些内容:
let mappedArray = aArray.map { [=13=].name }
let filteredArray = bArray.filter { !mappedArray.contains([=13=].title) }