【问题标题】:Efficient way to filter array of Person objects based on an array of string names基于字符串名称数组过滤 Person 对象数组的有效方法
【发布时间】:2016-08-31 10:47:20
【问题描述】:

我有一个名字数组:

var namesArray = ["Bert","Tony","Phil","George", "David"]

然后我有一个 Person 对象数组:

var personsArray: [Person]

我的 Person 类的 sn-p 是:

class Person {
    var name: String

 ...some code omitted...
}

我正在寻找一种方法来过滤我的 Persons 对象数组,使其仅包含在 namesArray 中找到的 Person

我考虑在数组上使用.filter,但我需要循环两个数组。

 let filterByNameArray =  persons.filter({
    ($0.name == //string)!
  })

但我认为这是不正确的,因为我还需要遍历 names 数组。我使用双 for 循环解决了我的问题:

 var pArray: [Person] = []

  for person in personsArray {

    for nameString in namesArray {
      if person.name == nameString {
        pArray.append(person)
      }
    }
  }

但是,这很丑陋并且使用了大量的 CPU,所以我的问题是,有没有更有效的方法来做到这一点? :) 我确定有。

【问题讨论】:

  • 出于好奇,你为什么要继承NSObject
  • @TimVermeulen 没问题,我将NSObject 子类化,这样我就可以将一个Person 对象与另一个对象进行比较。
  • 不要那样做。改为实现Equatable 协议。
  • @TimVermeulen 感谢您的提示。我现在刚开始使用 Swift,所以我有很多东西要学。 :)

标签: ios arrays swift filter comparison


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 2015-03-24
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2021-10-23
    相关资源
    最近更新 更多