您可以自己滚动,例如这样( 已针对Swift 1.2的Set进行了更新 ):
func uniq<S : SequenceType, T : Hashable where S.Generator.Element == T>(source: S) -> [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]
Swift 3版本:
func uniq<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}
并作为扩展
Array:
extension Array where Element: Hashable { var uniques: Array { var buffer = Array() var added = Set<Element>() for elem in self { if !added.contains(elem) { buffer.append(elem) added.insert(elem) } } return buffer }}