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的次数也很少
我有以下数组:
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的次数也很少