检查数组是否包含元素

Check if array contains element

我有一个叫 的 class 人:

class Person{

  let name: String?
  let areas: [Area]
}

区域由以下组成:

class Area{
  let id: String
  let name: String
}

我创建了一个 "people" 数组,我想做的是检查 "people" 数组是否 area.name = "Brooklyn"。如果它没有从 "people" 数组中删除那个人。

以下是我尝试过但不起作用的方法:

var people = [Person]()

for s in people{

  for a in s.preferredArea{

    if a.areaName != "Brooklyn"{

       let index = people.indexOf(s)
       people.removeAtIndex(index!)
    }
  }
}

谁能给我指出正确的方向?

要使用 indexOf,您必须使 Person 符合协议 Equatable:

class Person: Equatable {

    let name: String
    var area: [Area]

    init(name: String) {
        self.name = name
        self.area = []
    }
}

func ==(lhs: Person, rhs: Person) -> Bool {
    return lhs.name == rhs.name &&
           lhs.area == rhs.area      // You'll have to make Area equatable too
}

完成后,您的代码就可以正常工作了。如果你不想使用这个方法,你可以使用:

people.enumerate().forEach {
    if ![=11=].1.area.contains({ [=11=].name == "Brooklyn" }) {
        people.removeAtIndex([=11=].0)
    }
}

或者如果你可以使用过滤器创建一个新数组:

var newPeople = people.filter { [=12=].area.contains { [=12=].name == "Brooklyn" } }