使用 Swift 从数组中删除重复元素
使用 Swift 从数组中删除重复元素
我可能会有一个看起来像以下的数组:
[1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]
实际上,任何具有相同数据类型的序列都可以。我想要做的是确保每个相同元素只有一个。例如,上述数组将变为:
[1, 4, 2, 6, 24, 15, 60]
请注意,为了确保每个相同元素只有一个,2、6和15的重复项被删除了。Swift是否提供了一种轻松的方法来完成此操作,或者我必须自己完成?
admin 更改状态以发布 2023年5月20日
你可以自行编写,例如这样:
func unique(source: S) -> [T] where S.Iterator.Element == T { var buffer = [T]() var added = Set() 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() for elem in self { if !added.contains(elem) { buffer.append(elem) added.insert(elem) } } return buffer } }
或使用更优雅的方式(适用于 Swift 4/5):
extension Sequence where Element: Hashable { func uniqued() -> [Element] { var set = Set() return filter { set.insert($0).inserted } } }
它会被使用:
[1,2,4,2,1].uniqued() // => [1,2,4]