根据字符串名称数组过滤 Person 对象数组的有效方法
Efficient way to filter array of Person objects based on an array of string names
我有一个名字数组:
var namesArray = ["Bert","Tony","Phil","George", "David"]
然后我有一个 Person 对象数组:
var personsArray: [Person]
我的个人 class 的片段是:
class Person {
var name: String
...some code omitted...
}
我正在寻找一种方法来过滤我的 Persons 对象数组,以仅包含 Person
在 namesArray
中找到的姓名。
我考虑过在数组上使用 .filter
,但我需要循环两个数组。
let filterByNameArray = persons.filter({
([=13=].name == //string)!
})
但我认为这是不正确的,因为我还需要遍历名称数组。我使用双 for 循环解决了我的问题:
var pArray: [Person] = []
for person in personsArray {
for nameString in namesArray {
if person.name == nameString {
pArray.append(person)
}
}
}
然而,这很难看并且使用了大量 CPU 所以我的问题是,有没有更有效的方法来做到这一点? :) 我确定有。
在 namesArray
上使用 contains
方法搜索所有内容。
let filteredByNameArray = persons.filter {
namesArray.contains([=10=].name)
}
我有一个名字数组:
var namesArray = ["Bert","Tony","Phil","George", "David"]
然后我有一个 Person 对象数组:
var personsArray: [Person]
我的个人 class 的片段是:
class Person {
var name: String
...some code omitted...
}
我正在寻找一种方法来过滤我的 Persons 对象数组,以仅包含 Person
在 namesArray
中找到的姓名。
我考虑过在数组上使用 .filter
,但我需要循环两个数组。
let filterByNameArray = persons.filter({
([=13=].name == //string)!
})
但我认为这是不正确的,因为我还需要遍历名称数组。我使用双 for 循环解决了我的问题:
var pArray: [Person] = []
for person in personsArray {
for nameString in namesArray {
if person.name == nameString {
pArray.append(person)
}
}
}
然而,这很难看并且使用了大量 CPU 所以我的问题是,有没有更有效的方法来做到这一点? :) 我确定有。
在 namesArray
上使用 contains
方法搜索所有内容。
let filteredByNameArray = persons.filter {
namesArray.contains([=10=].name)
}