Swift
Swift3.0

自作クラスのArrayから重複を取り除く

More than 1 year has passed since last update.

まだまだSwift情弱なので新しく覚えたことはとりあえず残していってます

この辺を参考にしました

配列から重複要素を削除する
Swift 3でオブジェクトの配列の中にプロパティが同一なオブジェクトがすでに存在するか調べる

使い方

//元のクラスがこんな感じだとして
//下のextensionを追加した場合の動き動き
class Test{
  var id = ""
  init(id:String){
    self.id = id
  }
}




//idを持ってる何かしらのクラスを2つ用意
let test1 = [Test(id:"aaa"), Test(id:"ccc"), Test(id:"bbb"), Test(id:"ddd")]
let test2 = [Test(id:"eee"), Test(id:"bbb"), Test(id:"fff")]

//混ぜる
// ** id=bbbをもつものがふたつできちゃう **
//[{id "aaa"}, {id "ccc"}, {id "bbb"}, {id "ddd"}, {id "eee"}, {id "bbb"}, {id "fff"}]
let test3 = test1 + test2

//idでユニークにする
//[{id "aaa"}, {id "ccc"}, {id "bbb"}, {id "ddd"}, {id "eee"}, {id "fff"}]
let unqTest3 = test3.unique

extension

元のクラスを比較できるように拡張

extension Test: Equatable {
  static func == (lhs: Test, rhs: Test) -> Bool {
    return lhs.id == rhs.id
  }
}

配列をユニークできるように拡張

extension Array where Element: Equatable {
  var unique: [Element] {
    return reduce([Element]()) { $0.contains($1) ? $0 : $0 + [$1] }
  }
}