根据字符串名称数组过滤 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 对象数组,以仅包含 PersonnamesArray 中找到的姓名。

我考虑过在数组上使用 .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)
}