Swiftの配列で重複を削除する

純粋な言語のオマージュ

func nub<T:Equatable>(_ array: [T] ) -> [T] {
    return array.reduce([]) { $0.contains($1) ? $0 : $0 + [$1] }
}

func nub<T>(_ array: [T], isEquivalent: (T,T) -> Bool ) -> [T] {
    return array.reduce([]) {
        ( xs: [T], x: T ) -> [T] in
        xs.filter( { isEquivalent( $0, x ) } ).count != 0 ? xs : xs + [x]
    }
}
let foo = [1,1,2,2,2,3,3,3,4,4]
let bar = nub(foo)
// bar == [1, 2, 3, 4]
let barbar = nub(foo,isEquivalent:{$0==$1})
// barbar == [1, 2, 3, 4]

順番を変えてしまっていたのでケシケシ。
間違いに気付いて再度ケシケシ。
Set(array).countで足りることに気付いて再びケシケシ。