从 Swift 中的数组中删除重复元素 [英] Removing duplicate elements from an array in Swift
本文介绍了从 Swift 中的数组中删除重复元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我可能有一个如下所示的数组:
I might have an array that looks like the following:
[1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]
或者,实际上,任何类似类型的数据部分序列.我想要做的是确保每个相同的元素只有一个.例如,上面的数组将变成:
Or, really, any sequence of like-typed portions of data. What I want to do is ensure that there is only one of each identical element. For example, the above array would become:
[1, 4, 2, 6, 24, 15, 60]
请注意,删除了 2、6 和 15 的重复项以确保每个相同的元素只有一个.Swift 是否提供了一种轻松完成此操作的方法,还是我必须自己完成?
Notice that the duplicates of 2, 6, and 15 were removed to ensure that there was only one of each identical element. Does Swift provide a way to do this easily, or will I have to do it myself?
推荐答案
您可以推出自己的方案,例如像这样:
You can roll your own, e.g. like this:
func unique<S : Sequence, T : Hashable>(source: S) -> [T] where S.Iterator.Element == T {
var buffer = [T]()
var added = Set<T>()
for elem in source {
if !added.contains(elem) {
buffer.append(elem)
added.insert(elem)
}
}
return buffer
}
let vals = [1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]
let uniqueVals = uniq(vals) // [1, 4, 2, 6, 24, 15, 60]
并作为Array
的扩展:
extension Array where Element: Hashable {
func uniqued() -> Array {
var buffer = Array()
var added = Set<Element>()
for elem in self {
if !added.contains(elem) {
buffer.append(elem)
added.insert(elem)
}
}
return buffer
}
}
或者更优雅(Swift 4/5):
Or more elegantly (Swift 4/5):
extension Sequence where Element: Hashable {
func uniqued() -> [Element] {
var set = Set<Element>()
return filter { set.insert($0).inserted }
}
}
将用于:
[1,2,4,2,1].uniqued() // => [1,2,4]
这篇关于从 Swift 中的数组中删除重复元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文