本文向大家介绍稍许算法的实现:关于如何去除数组中的重复元素,并比较了三种算法之间的效率.全部代码在Xcode的Playground中实现,直观明了,适合Swift学习入门童鞋观赏.有个前提
如题,很多童鞋立即给出解决方法,无外乎是利用Swift内置的集合(Set)或字典(Dict)的一个特性:过滤重复元素.
但由于集合和字典中元素的顺序是无法保证的,所以这建立在一个前提基础之上:结果数组元素顺序和原数组可以不同!
【化繁为简:Swift剔除数组中重复元素的几种姿势】但本文的算法要求:在剔除重复元素之后,元素顺序和原数组必须相同,这正是数组核心特点:有序性的一种体现.
第一种实现
如果想要简单,就必须要多些限制.
如果数组元素能满足Hashable协议,我们利用内置集合也未尝不可:
extension Array where Element:Hashable{
/// 返回剔除重复元素后的数组,其元素顺序不变
public var noRepetitionUseSet:[Element]{
var set = Set(self)
var resultAry = [Element]()for item in self{
if set.contains(item){
//只会保留第一个重复元素!!!
resultAry.append(item)
set.remove(item)
}
}
return resultAry
}
}
如上,我们首先用集合过滤所有重复的元素,然后遍历数组,只保留第一个重复的元素.这样原有数组的顺序即得以保持不变.