【问题标题】:Swift: Removing limited number of Objects from an Array without using indexSwift:在不使用索引的情况下从数组中删除有限数量的对象
【发布时间】:2016-03-04 04:04:08
【问题描述】:

我有以下数组:

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 的前三个元素?我必须使用旧的 for 循环,还是可以使用高阶函数?

【问题讨论】:

  • “在不知道索引的情况下删除前3个元素”是什么意思?您的预期结果是什么?
  • 你的意思是删除数组“pizzas”中的前三个“chPizza”实例
  • 是的,删除“chPizza”的前三个实例。

标签: swift swift2 ios9


【解决方案1】:

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

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)}

请注意,这是低效的!但是如果数组很小并且我们删除的次数很少,我们可以负担得起。

【讨论】:

  • 你今天简直要杀了它!
  • 这不是我的错。你是那个不断提出有趣问题的人!
  • 这给了我一个错误:类型 ["String":"String"] 不符合协议 'Equatable'
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2013-07-27
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2022-01-19
相关资源
最近更新 更多