2016-12-04 58 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