スライドショー

【Swift入門】reduceの使い方を分かりやすく解説!

Swiftには配列の要素をまとめて計算したいときに便利な機能があります。

この記事では、

・reduceとは
・reduceの基本的な使い方
・reduceの中では何が行われているか?

というreduceの基本的な解説から、

・クロージャを引数に指定する方法
・型・return・引数を省略する方法

などの応用的な使い方に関しても解説していきます。

今回はそんなreduceの使い方についてわかりやすく解説します!

※この記事ではSwift4.0を使用しています。

reduceとは

reduceとは、配列の全要素の値を計算して合計を求めたいときなどに使用します。

reduceは以下のように記述します。

書き方:

配列名.reduce(初期値){$0 + $1}

reduceの引数には初期値を指定します。

$0は指定した初期値と$1を{}で計算した結果で、$1には配列の要素を順番に取り出した値が入ります。

他のプログラミング言語ではreduceのような処理はあまり見かけませんので、使い方のイメージが湧きにくいと思います。

次項ではreduceの使い方について詳しく解説していきます!

reduceの使い方

ここではサンプルを交えてreduceの使いかたを見ていきましょう。

基本的な使い方

reduceは前述したとおり、初期値で指定した値を元に配列の全ての要素を計算するときに使用します。

以下にreduceを使用して配列の合計を求めるサンプルを紹介します。

サンプルプログラム

//配列の定義
let array = [1, 2, 3, 4, 5]

//reduceで配列の合計を求める
let sum = array.reduce(0) {(num1: Int, num2: Int) -> Int in
    return num1 + num2
}
print(sum)


実行結果:

15

上記のサンプルプログラムでは、まずreduceの引数に0を指定しています。

次に変数num1には初期値で指定した値とnum2で計算した結果が格納され、変数2には配列の要素が順番に格納されます。

合計を求める変数sumの値を出力すると、配列の全要素の合計値が取得されていることがわかりますね。

reduceの中では何が行われている?

ここまでの解説で、まだreduceの仕組みにピンと来ない方もいるのではないでしょうか?

reduceの処理は{}の中でfor文のように要素を1つずつ計算しているイメージになります。

先ほど紹介したサンプルプログラムを以下のようにすると、reduceの処理のイメージが掴みやすいと思います。

サンプルプログラム:

//配列の定義
let array = [1, 2 ,3, 4, 5]

//reduceで配列の合計を求める
let sum = array.reduce(0) {(num1: Int, num2: Int) -> Int in
    print("num1 : \(num1)")
    print("num2 : \(num2)")
    print("-*-*-*-*-*-*-*-*-")
    return num1 + num2
}

print(sum)

実行結果:

num1 : 0
num2 : 1
-*-*-*-*-*-*-*-*-
num1 : 1
num2 : 2
-*-*-*-*-*-*-*-*-
num1 : 3
num2 : 3
-*-*-*-*-*-*-*-*-
num1 : 6
num2 : 4
-*-*-*-*-*-*-*-*-
num1 : 10
num2 : 5
-*-*-*-*-*-*-*-*-
15

上記のようにreduceの処理中で変数を出力してみると、処理ごとに値が加算されていることがわかりますね!

この処理をfor文で実行すると、以下のようになります。

サンプルプログラム:

var sum = 0
let array = [1, 2, 3, 4, 5]

for value in array {
    sum += value
}

print(sum)

実行結果:

15

for文の場合では、最初にsumに0を代入する処理がreduce(0)となります。

for文の中ではreduceと同様に要素ごとに値が計算され、最終的に配列の要素分の合計を取得することができます。

for文については以下の記事で詳しく解説していますので、参考にしてください!

reduceのさまざまな使い方

ここではreduceのさまざまな使い方を見ていきましょう。

クロージャを引数を指定

配列の定義とreduceを同時に行い、reduceの引数にクロージャとして指定することも可能です。

reduceの引数にクロージャを指定:

let sum = 
    [1, 2, 3, 4, 5]
        .reduce(0, {(num1: Int, num2: Int) -> Int in return num1 + num2})

print(sum) //15

クロージャについては以下の記事で詳しく解説していますので参考にしてください!

型・戻り値・引数の省略

reduceで指定する引数の型は省略することも可能です。

引数の省略:

let sum = 
    [1, 2, 3, 4, 5]
        .reduce(0, {(num1, num2) -> Int in return num1 + num2})

print(sum) //15

returnを省略することも可能です。

returnの省略:

let sum = 
    [1, 2, 3, 4, 5]
        .reduce(0, {(num1, num2) -> Int in num1 + num2})

print(sum) //15

まとめ

ここではreduceについて、

・reduceとは
・reduceの基本的な使い方
・reduceの中では何が行われているか?
・クロージャを引数に指定する方法
・型・return・引数を省略する方法

などについて解説しました。

reduceを使えば、配列の合計などの計算が簡単に行えますので、使い方についてはよく覚えておきましょう。

もし、reduceの使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説