检查数组包含元素
问题描述:
我有一个名为人类:检查数组包含元素
class Person{
let name: String?
let areas: [Area]
}
而且区组成如下:
class Area{
let id: String
let name: String
}
我创建了一个“人”阵列和我想要做的是检查“people”数组,如果area.name =“*lyn”。如果它不会将该人从“人物”阵列中删除。
这是我已经试过,但它不工作:
var people = [Person]()
for s in people{
for a in s.preferredArea{
if a.areaName != "*lyn"{
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 !$0.1.area.contains({ $0.name == "*lyn" }) {
people.removeAtIndex($0.0)
}
}
或者,如果你可以使用过滤器来创建一个新的数组:
var newPeople = people.filter { $0.area.contains { $0.name == "*lyn" } }
+0
谢谢Eendje –
不能突变,你是数组迭代。你可以建立一个新的数组,然后将其分配给你的属性/完成后从函数返回它。 – Paulw11