检查数组是否包含元素

时间:2016-06-13 00:18:14

标签: ios arrays swift filtering

我有一个名为 Person 的课程:

class Person{

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

Area 包含以下内容:

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

我创建了一个“people”数组,我想要做的是检查“people”数组,如果是area.name =“Brooklyn”。如果它没有从“人”阵列中删除该人。

这是我尝试过的但是不起作用:

var people = [Person]()

for s in people{

  for a in s.preferredArea{

    if a.areaName != "Brooklyn"{

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

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

要使用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 !$0.1.area.contains({ $0.name == "Brooklyn" }) {
        people.removeAtIndex($0.0)
    }
}

或者,如果您可以使用过滤器来创建新阵列:

var newPeople = people.filter { $0.area.contains { $0.name == "Brooklyn" } }