化繁为简:Swift剔除数组中重复元素的几种姿势

本文向大家介绍稍许算法的实现:关于如何去除数组中的重复元素,并比较了三种算法之间的效率.全部代码在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 } }

如上,我们首先用集合过滤所有重复的元素,然后遍历数组,只保留第一个重复的元素.这样原有数组的顺序即得以保持不变.

    推荐阅读