Swiftで配列にuniqをかけるやつ
タイトル通り。 メソッド名は標準のsortInPlaceに合わせた感じにした。
一応使い方
// 引数なし版 var numbers = [1, 2, 3, 2, 3, 4] let uniqHoges = numbers.uniq() print(uniqHoges) // => [1, 2, 3, 4] print(numbers) // => [1, 2, 3, 2, 3, 4] numbers.uniqInPlace() print(numbers) // => [1, 2, 3, 4] // 引数に変換関数を渡す版 struct Fuga { let id: String let foo: Int } var fugas = [ Fuga(id: "a", foo: 1), Fuga(id: "b", foo: 1), Fuga(id: "a", foo: 2) ] let uniqFugas = fugas.uniqBy { $0.id } print(uniqFugas) // => [Fuga(id: "a", foo: 1), Fuga(id: "b", foo: 1)] print(fugas) // => [Fuga(id: "a", foo: 1), Fuga(id: "b", foo: 1), Fuga(id: "a", foo: 2)] fugas.uniqInPlaceBy { $0.id } print(fugas) // => [Fuga(id: "a", foo: 1), Fuga(id: "b", foo: 1)]
追記
そういえば、NSOrderedSetに変換してからArrayに戻すスタイルでも実装できる。 どっちが効率良いのかは見ていない。