基于字符串名称数组

时间:2016-05-05 15:10:16

标签: ios arrays swift filter comparison

我有一系列名字:

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,所以我的问题是,有没有更有效的方法来做到这一点? :)我确定有。

1 个答案:

答案 0 :(得分:1)

使用contains上的namesArray方法搜索所有内容。

let filteredByNameArray = persons.filter {
  namesArray.contains($0.name)
}