純粋な言語のオマージュ
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で足りることに気付いて再びケシケシ。