【问题标题】:Check if array contains element检查数组是否包含元素
【发布时间】:2016-10-13 07:38:25
【问题描述】:

我有一个名为Person的类:

class Person{

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

区域由以下组成:

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

我创建了一个“人”数组,如果 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!)
    }
  }
}

谁能指出我正确的方向?

【问题讨论】:

  • 你不能改变你正在迭代的数组。您可以构建一个新数组,然后将其分配给您的属性/完成后从函数中返回它。

标签: ios arrays swift filtering


【解决方案1】:

要使用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" } }

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2022-09-27
    • 2021-06-20
    • 2013-02-20
    相关资源
    最近更新 更多