检查数组是否包含元素
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" } }
我有一个叫 的 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" } }