【问题标题】:How to display unique elements of an array using Swift? [duplicate]如何使用 Swift 显示数组的唯一元素? [复制]
【发布时间】:2017-03-27 13:08:53
【问题描述】:

我有一个重新调整数组的公式,例如 var Array = [a,s,d,s,f,g,g,h,e]。我想要的是运行for 循环或其他一些选项,让我返回a,s,d,f,g,h,e - 只有唯一值。如何使用 ios Swift 做到这一点?

【问题讨论】:

  • 你关心元素的顺序吗?

标签: arrays swift sorting filter nsarray


【解决方案1】:

如果您不关心订单:

只需使用一个集合:

let set: Set = ["a", "s", "d", "s", "f", "g" , "g", "h", "e"]
print(set) // ["a", "s", "f", "g", "e", "d", "h"]

如果您关心订单:

使用这个扩展,它允许您删除任何Sequence 的重复元素,同时保持顺序:

extension Sequence where Iterator.Element: Hashable {
    func unique() -> [Iterator.Element] {
        var alreadyAdded = Set<Iterator.Element>()
        return self.filter { alreadyAdded.insert($0).inserted }
    }
}

let array = ["a", "s", "d", "s", "f", "g" , "g", "h", "e"]
let result = array.unique()
print(result) // ["a", "s", "d", "f", "g", "h", "e"]

【讨论】:

  • 我认为,如果将已经添加的类型更改为 Array,它会更快。
  • @masakih 是什么让你怀疑?集合具有O(1) 查找(需要快速contains(_:) 调用),而数组在一般情况下具有 O(n) 循环查找
  • 对不起!我只关注insert(_:)。但我忽略了contains(_:)
  • @masakih insert(_:) 也是固定时间。
  • 我检查了Array.append(_:)Set.insert(_:) 哪个快。 Array.append(_:) 使用 Set.insert(_:) 的一半时间。当然,在这种情况下 Set 是最好的。 [swift.sandbox.bluemix.net/#/repl/58d9e75c50cb957f193a78d9]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 2022-07-21
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多