開発

【swift】Objective-Cには無かった感動のmap、filter、reduceたち

どうもこんにちは。iOSをメインに開発しているロッキーカナイです。

このタイトル「Objective-Cには無かった感動の〜」って少し大げさじゃない?って思われるかもしれませんが、実際に私が感動して泪が溢れ出した経験があるので間違いありません!w(・・泪は流してませんが、職場でなければ雄叫びぐらいは上げていたかもですw)

ただ、本当にこれらを知っているのと知らないのでは大きな差がありますので、まだ知らない方は是非お読み頂ければ今後の糧になると思います。かなり便利です。

 

map

全要素に処理を適応したい場合に使う

例1

配列に1から10までの要素があり、すべての要素を10倍にしたい場合

let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

let newNums = nums.map({(num: Int) -> Int in return num * 10})

print(“newNums:\(newNums)”)

ログ newNums:[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

map()に全要素に行いたい処理をクロージャで与えます。

{(num: Int) -> Int in return num * 10}

{(引数: 型) -> 戻り型 in return 処理}

 

例2戻り型を省略したパターン

let newNums = nums.map({(num: Int) in return num * 10})

例3returnを省略したパターン

let newNums = nums.map({(num: Int) in num * 10})

例4引数を省略したパターン

let newNums = nums.map { $0 * 10 }

$0は第一引数という意味になります

 

filter

条件にある要素を取り出す

配列に1から10までの要素があり、5以上の要素だけを取り出す場合

let sortednums = nums.filter({(num: Int) -> Bool in return num >= 5})

print(“sortednums:\(sortednums)”)

ログ sortednums:[5, 6, 7, 8, 9, 10]

戻り型、return、引数を省略したパターン

mapでも紹介しましたが省略した形式で記述可能です。

let sortednums = nums.filter({ $0 >= 5 })

 

reduce

要素をひとまとめにする

配列に1から10までの要素があり、合計値を算出する

let reduceNum = nums.reduce(0, {(a: Int, b: Int) -> Int in return a + b})

print(“reduceNum:\(reduceNum)”)

ログ reduceNum:55

戻り型、return、引数を省略したパターン

map、filterでも紹介しましたが省略した形式で記述可能です。

let reduceNum = nums.reduce(0) {$0 + $1}

 

いかがでしょうか?今回紹介したmap、filter、deduceを使用することで、無駄な空配列を用意しなくてもよく、圧倒的に見やすく、コード量も少なく済みます。まだまだSwiftには便利な関数が用意されてますので、これを機に探してみてはいかがでしょうか?

ABOUT ME
ロッキーカナイ
ロッキーカナイ
iOSをメインに、SwiftやObjective-C言語の開発をしてます。趣味は猫と戯れる事、PHPを使ったサイト作成やAndroidの開発もしております。ちなみに名前のロッキーカナイはよく昼飯を食べる所w