gpt4 book ai didi

arrays - iOS swift : How to find unique members of arrays of different types based on specific attributes

转载 作者:搜寻专家 更新时间:2023-10-31 22:07:16 25 4
gpt4 key购买 nike

目标:我有两个不同的类,以及两个包含每个类成员的数组。使用 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 循环与任何更高级的东西一样快或更快,我也很乐意使用它。

最佳答案

我不确定这段代码是花哨还是优雅,但是,我们可以这样做:

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) }

关于arrays - iOS swift : How to find unique members of arrays of different types based on specific attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com