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.nameB.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:如何根据特定属性查找不同类型数组的唯一成员的主要内容,如果未能解决你的问题,请参考以下文章

Swift基础学习数据类型

如何在特定字段 MongoDB 上查找 Distinct No of Document 并根据条件打印文档数?

xsl如何根据来自不同元素的属性汇总一种特定类型元素的总和

如何根据查找具有特定值的实体在我的核心数据之间进行迭代

swift-如何确保最初在哪个协议或类型中定义了特定属性?

如何从 Swift 中特定工作日的日期范围中查找日期?