iOS Swift:如何根据特定属性查找不同类型数组的唯一成员
Posted
技术标签:
【中文标题】iOS Swift:如何根据特定属性查找不同类型数组的唯一成员【英文标题】:iOS Swift: How to find unique members of arrays of different types based on specific attributes 【发布时间】:2016-01-18 10:24:48 【问题描述】:目标:我有两个不同的类,以及两个包含每个类成员的数组。使用 Swift 2.0,我想根据每个类的特定属性找到一个数组与另一个数组相比的唯一成员。
例子:
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 之间的一些操作,它返回 aArray 的第 3 个和第 4 个元素,因为它们在 aArray 中是唯一的,其中比较的基础是属性 A.name
和 B.title
。
当然,颠倒操作顺序会挑出bArray的第3个元素,因为它在bArray中是唯一的。
我知道我可以使用简单的 for 循环直接完成目标,但我希望能得到更优雅和更优化的东西。但是,如果 for 循环与任何更高级的循环一样快或更快,我也很乐意使用它。
【问题讨论】:
【参考方案1】:我不确定这段代码是否漂亮或优雅,但是,我们可以这样做:
let mappedArray = bArray.map $0.title
let filteredArray = aArray.filter !mappedArray.contains($0.name)
所以当我们想要来自aArray
的唯一元素时,我们首先映射来自bArray
的元素以获取我们想要实际比较的值的数组:
let mappedArray = bArray.map $0.title
mappedArray
只是一个基于bArray
中对象的title
属性的字符串数组。
接下来,我们使用filter
方法过滤来自aArray
的对象。 filter
方法返回一个数组,其中包含在我们的闭包中通过测试的对象。我们要应用的测试是我们刚刚构建的映射数组中不包含的对象。
let filteredArray = aArray.filter !mappedArray.contains($0.name)
如果我们想换一种方式,只需改变一些东西:
let mappedArray = aArray.map $0.name
let filteredArray = bArray.filter !mappedArray.contains($0.title)
【讨论】:
感谢 nhgrif,正是我想要的!非常简洁和有效。是的,我必须更加熟悉地图和过滤器功能。 好遮阳篷,这就是我要找的,但是,代码的第二部分对我不起作用:/这对新的 Swift 版本有任何链接更改吗? 究竟是哪一部分出现了错误,究竟是什么错误?以上是关于iOS Swift:如何根据特定属性查找不同类型数组的唯一成员的主要内容,如果未能解决你的问题,请参考以下文章