func uniq(lst: [T]) -> [T] { var seen = Set(minimumCapacity: lst.count) return lst.filter { x in let unseen = !seen.contains(x) seen.insert(x) return unseen } } println(uniq([3,2,1,2,3,4]))