【发布时间】:2021-01-25 01:48:07
【问题描述】:
我有两个不同的自定义结构数组(比如说 [NameAndAge] 和 [FullName])。我想将它们组合成一个新对象数组(我们称之为 FullNamesAndAges)。我的想法是遍历它们,匹配名字以创建新对象。
如果我的结构是这样的:
struct NameAndAge {
let name: String
let age: Int
}
struct FullName {
let firstName: String
let lastName: String
}
我的新对象如下所示:
class PersonViewModel {
let firstName: String
let lastName: String
var age: Int
// with initializer
}
我将如何做到这一点?现在,我正在使用两张地图,但我想知道是否有更短/更清洁/更高效/更好(插入您喜欢的形容词)的方式来做到这一点?我完全理解这可能是主观的,因为这是一个见仁见智的问题。我只是想知道是否有更快的方法来实现这一点。
我目前拥有的:
let namesAndAges: [NameAndAge] = // pretend this is an array of 10+ structs, unordered
let fullNames: [FullName] = // pretend this is an array of 10+ structs, unordered
let people = namesAndAges.compactMap { nameAge in
fullNames.compactMap { fullName in
if fullName.firstName == nameAge.name {
return PersonViewModel(fullName.firstName, fullName.lastName, nameAge.age)
}
}
}
对我来说,这看起来超级草率,这就是为什么我希望有一种“更好”的方法来做到这一点。我不能使用zip,因为它们是无序的。
【问题讨论】:
-
这两个数组中是否有重复的名称?那会发生什么?每个数组中预计有多少元素?这将确定您可能要优化的内容