我有一系列名字:
var namesArray = ["Bert","Tony","Phil","George", "David"]
然后我有一个人物对象数组:
var personsArray: [Person]
我的Person类的片段是:
class Person {
var name: String
...some code omitted...
}
我正在寻找一种方法来过滤我的Persons对象数组,只包含Person
中找到的namesArray
名称。
我考虑在数组上使用.filter
,但我需要遍历两个数组。
let filterByNameArray = persons.filter({
($0.name == //string)!
})
但我认为这是不正确的,因为我还需要循环遍历names数组。我使用double for循环解决了我的问题:
var pArray: [Person] = []
for person in personsArray {
for nameString in namesArray {
if person.name == nameString {
pArray.append(person)
}
}
}
然而,这很丑陋并且使用了大量的CPU,所以我的问题是,有没有更有效的方法来做到这一点? :)我确定有。
答案 0 :(得分:1)
使用contains
上的namesArray
方法搜索所有内容。
let filteredByNameArray = persons.filter {
namesArray.contains($0.name)
}