【備忘録】配列の中の空文字を取り除く(.filter)


はじめに

.filterを使って配列の中の空文字を取り除く処理について備忘録として残します
(初心者向け)

やりたいこと

["a", "b", "c", "", "e", "", "g"]
この配列から空文字を取り除いて、文字だけの配列にする

初心者パターン

for文で書く
私は元々はこう書いていました。(初心者)

beginner
let list1 = ["a", "b", "c", "", "e", "", "g"]
var list2 = [String]()

for hoge in list1 {
    if hoge != "" {
        list2.append(hoge)
    } else {
        continue
    }
}

print(list2) //["a", "b", "c", "e", "g"] 

上級者パターン

.filterをつかう

advanced
let list1 = ["a", "b", "c", "", "e", "", "g"]

let list2 = list1.filter{!$0.isEmpty}

print(list2) //["a", "b", "c", "e", "g"]  

1行で書けた

解説(初心者向け)

「$0」には、配列の中身が1つずつ入ってくる。
「isEmpty」は空かどうかをみてくれる。
(空の時はtrue/そうでない時はfalseを返してくれる)

.filter{$0.isEmpty} = 空だけ取り出される

「!」をつけると意味が反対になる(~ではない)

.filter{!$0.isEmpty} = 空でない物を取り出す

おわり

初めは慣れないですが、慣れればとても便利です。