Swift: 在不使用索引的情况下从数组中删除有限数量的对象

Swift: Removing limited number of Objects from an Array without using index

我有以下数组:

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 循环,还是有我可以使用的高阶函数?

让我们创建自己的高阶方法:

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

好的,我们开始吧;它现在是单行的(但请注意,我们必须转换为 NSDictionary,因为 Swift 字典不是 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)}

请注意,这是低效的!但是我们可以承受,如果数组很小,我们remove的次数也很少