📑

Swift 学習してなかった配列のシーケンス操作について勉強したら早めに知っておけば良かったって後悔した

2022/03/25に公開

はじめに

配列操作について下記記事が参考になりました。

https://qiita.com/REON/items/1f33886d90b4f758e715

いわゆるインデックスで指定番目の値を取り出すことや、要素数を数えるcountなどがあります。
その中の応用でシーケンス操作というものがあります。

こちらについて勉強不足で使ってきませんでしたが、コードが短く書ける利点などあり、割と使う場面がありそうで良いと思ったので今回勉強して良かったです。

filterについて

聡明な皆さんであればコード見た方が速そうです。

条件を満たすものだけを取り出し、新しい配列を作ることができる。(引用)

let list = [1,2,3,4,5,6,7,8,9,10]
let filtedlist = list.filter {
    $0 % 2 == 0
}

// 結果:[2, 4, 6, 8, 10]

mapについて

配列の各要素に指定した処理を適応させ、その結果からなる新しい配列を作成することができる。(引用)

let list = [1,2,3,4,5,6,7,8,9,10]
let filtedlist = list.map {
    $0 + 1
}

// 結果:[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

reduceについて

シーケンスに含まれる要素を一つずつ全て使って処理を行い、その結果として一つの値を返します。 (引用)

let list = [1,2,3,4,5,6,7,8,9,10]
let filtedlist = list.reduce(0) {
    $0 + $1
}

// 結果:55

補足ですが、.reduce(0)(0)は一番最初の$0にセットされる値です。
なので最初の計算は0+00+11+23+3というふうに処理されていきます。

補足

ちなみにシーケンス操作を複合することも可能です。

let list = [1,2,3,4,5,6,7,8,9,10]
let filtedlist = list.map{
    $0 * 100
}.filter {
    $0 % 3 == 0
}

print(filtedlist)

// 結果:[300, 600, 900]

Discussion