kitoko552.memo

kitoko552のメモ

【Swift】配列の要素をfunctionalに削除する

簡潔にまとめると

削除したい要素を取り除くのではなく、削除したい要素以外を再代入すればいい。

array = array.filter { $0.index != num }

もうちょい詳しく

Swiftは配列等の集合(SequenceTypeプロトコルを適応したもの)はmapやfilter等を使ってfunctionalに扱うことができます。

kitoko552.hatenablog.com

kitoko552.hatenablog.com

しかし、要素の削除をfunctionalに行おうと思っても都合のいいメソッドがありません。

// こんな感じで削除したい。
array.filter { $0.index == num }.remove
array.remove { $0.index == num }

extensionでメソッドを加えてもいいのですがやや面倒なので、仕方なくfor文を使いがちです。

for element in array {
  if element.index == num {
    array.removeObject(element)
    break
  }
}

Swiftっぽくないのでもやもやします。
しかし、考え方を変えればfunctionalに要素を削除することができます。
削除したい要素を取り除くのではなく、削除したい要素以外を再代入するのです。

array = array.filter { $0.index != num }

簡単!そしてSwifty!

おわり。