提供两个数组去重的扩展,第一个是大家网上直接搜索最常见的:
extension Array {
func uniqued<E: Equatable>(_ filter: (Element) -> E) -> [Element] {
var result = [Element]()
for ele in self {
let key = filter(ele)
if !result.map({ filter($0) }).contains(key) {
result.append(ele)
}
}
return result
}
}
没有什么大问题,但是数据稍微多一点耗时就增加,如果直接在主线程的话还会造成卡顿,时间复杂度O(n^2),不太建议使用
优化时间复杂度,常见的就是使用 Map 了:
extension Array {
func uniqued<H: Hashable>(_ filter: (Element) -> H) -> [Element] {
var result = [Element]()
var map = [H: Element]()
for ele in self {
let key = filter(ele)
if map[key] == nil {
map[key] = ele
result.append(ele)
}
}
return result
}
}
时间复杂度 O(n) ,建议使用
当然还有一种比较搞笑的去重方式那就是使用 Set
, 但是实际项目中遇到简单的数据去重的情况比较少,一般数组内装的都是一个结构体或者一个类这样的数据模型的情况居多。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有