2016-03-04 60 views
1

我有以下的數組:夫特:刪除從數組對象的有限數量的不使用索引

let chPizza = ["type": "deep", "Style" : "Chicago", "Size" : 12] 
let nyPizza = ["type": "thin", "Style" : "New York", "Size" : 14] 
let caPizza = ["type": "thai", "Style" : "California", "Size" : 12] 
let gkPizza = ["type": "thick", "Style" : "Greek", "Size" : 16] 


var pizzas = [chPizza, chPizza, gkPizza, nyPizza, caPizza, chPizza, chPizza, gkPizza, caPizza, chPizza] 

如何刪除的chPizza第一3個元素?我必須使用舊的for-loop,還是有一個我可以使用的高階函數?

+0

你是指「在不知道索引的情況下刪除前3個元素」是什麼意思?你期望的結果是什麼? –

+1

您的意思是刪除陣列中「chPizza」的前三個實例「pizzas」 –

+0

是的,刪除前三個「chPizza」實例。 – user1107173

回答

2

讓我們創造我們自己的高階方法:

extension Array where Element:Equatable { 
    mutating func removeObject(obj:Element) { 
     if let ix = self.indexOf(obj) { 
      self.removeAtIndex(ix) 
     } 
    } 
} 

好了,我們開始吧;它現在是一個一行(但是請注意,我們必須轉換爲NSDictionary中,因爲斯威夫特字典是不是Equatable,所以你不能找到一個數組中的):

let chPizza = ["type": "deep", "Style" : "Chicago", "Size" : 12] 
let nyPizza = ["type": "thin", "Style" : "New York", "Size" : 14] 
let caPizza = ["type": "thai", "Style" : "California", "Size" : 12] 
let gkPizza = ["type": "thick", "Style" : "Greek", "Size" : 16] 

var pizzas : [NSDictionary] = [chPizza, chPizza, gkPizza, nyPizza, caPizza, chPizza, chPizza, gkPizza, caPizza, chPizza] 

(0..<3).forEach {_ in pizzas.removeObject(chPizza)} 

請注意,這是低效!但是我們可以承受,如果陣列很小並且我們移除的次數很少。

+0

你今天剛剛殺死它! – user1107173

+1

這不是我的錯。你是一直在問這些有趣的問題的人! – matt

+0

這給了我一個錯誤:類型[「String」:「String」]不符合協議'Equatable' –