【发布时间】:2020-05-02 01:32:44
【问题描述】:
我已经创建了这两个对象:
struct Person {
let name: String
let genderId: Int
}
struct Gender {
let id: Int
let sex: String
}
并创建这些数组:
let persons = [
Person(name: "Steve", genderId: 1),
Person(name: "Kate", genderId: 2),
Person(name: "Mark", genderId: 1),
Person(name: "Pam", genderId: 2)
]
let genders = [
Gender(id: 1, sex: "girl"),
Gender(id: 2, sex: "boy"),
]
为了基于这个新对象创建对象数组,使用大 O 表示法的最有效算法应该是什么:
struct PersonWithGenderString {
let name: String
let genderString: String
}
我已经使用两个 forEach 循环编写了这个方法,但我正在寻找迭代时间尽可能少的方法:
persons.forEach { (person) in
genders.forEach { (gender) in
if person.genderId == gender.id {
let personWithGenderString = PersonWithGenderString(name: person.name, genderString: gender.sex)
print(personWithGenderString)
}
}
}
【问题讨论】:
-
最高效的算法其实需要高效的数据结构。即具有 O(1) 查找给定 id 的性别的人。例如哈希表
-
看起来像 stackoverflow.com/q/61527981/3141234 的副本
标签: swift algorithm foreach big-o