2016-12-04 30 views
2

好吧,这应该不会太困难,但周日早上证明我错了......斯威夫特Array中只有一个项目有一个特定的值

我有一个结构Array,并希望删除只有一个struct,用于将其名称属性与String匹配。例如:

struct Person { 
    let name: String 
} 

var myPersons = 
[Person(name: "Jim"), 
Person(name: "Bob"), 
Person(name: "Julie"), 
Person(name: "Bob")] 

func removePersonsWith(name: String) { 
    myPersons = myPersons.filter { $0.name != name } 
} 

removePersonsWith(name: "Bob") 
print(myPersons) 

结果:

[Person(name: "Jim"), Person(name: "Julie")] 

但我怎么只删除一个鲍勃?

+0

告诉我什么区分两个鲍勃,然后我会告诉你如何。但如果没有,你可以设置一个布尔标志,所以一旦过滤器设置为false,它将退出循环 – Honey

+0

这两个Bob完全相同,它们是彼此的克隆,但我只想删除其中的一个。 – Koen

+0

我只是好奇,你为什么要这样的功能?它是否删除重复?或者是其他东西? – Honey

回答

3
  • filter过滤器符合条件,所有项目

  • index返回与条件匹配的第一项的索引。

    func removePersonsWith(name: String) { 
        if let index = myPersons.index(where: {$0.name == name}) { 
         myPersons.remove(at: index) 
        } 
    } 
    

然而,函数的名称是一种误导。它应该是removeAPersonWith ;-)

+0

我不认为这是OP最终想要的。他想擦除除一个之外的所有东西,即如果他有5个Bob,他会删除其中的4个,这样就可以移除其中的1个。 Koen,请让我们知道你想要什么。否则好的答案 – Honey

+0

不,我只想删除一个Bob – Koen