質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

2004閲覧

swift reduceの引数について

Blue0999

総合スコア148

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/03/04 06:02

reduceの直後にある丸括弧の中の0は一見どこにも使われていない様に思えるのですがどのような意味があるのでしょうか?
また引数$0と$1にはどのような順番での値が代入されているのでしょうか?

詳解swift改訂版(318p)より引用。
let numbers = [1, 2 ,3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

swift

1let sum = numbers.reduce(0) { $0 + $1 }

上記の書き方はショートハンド引数名といい省略されている書き方になります。

下に省略されていない書き方をを載せましたので、実行してみてください。
どのようにClosureの中が動いているのかわかると思います。

swift

1let numbers = [1, 2 ,3, 4, 5] 2 3var reduceValue = numbers.reduce(0) { (num1: Int, num2: Int) -> Int in 4 print("num1 = \(num1)") 5 print("num2 = \(num2)") 6 print("--------------") 7 return num1 + num2 8}

swift

1// こちらも省略した別の書き方になります。 2var reduceValue = numbers.reduce(0, combine: +)

投稿2016/03/05 00:44

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

reduceの直後にある丸括弧の中の0は一見どこにも使われていない様に思えるのですがどのような意味があるのでしょうか?

0$0の初期値です。

また引数$0と$1にはどのような順番での値が代入されているのでしょうか?

ループの中で値を出力してみてはどうでしょうか?

投稿2016/03/04 06:35

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

reduceの(0)は初期値、$0は初期値と$1を{(中略)}で計算した途中結果、$1は配列の中身をひとつずつ取り出したものです。

for文を使えば、

Swift

1var sum = 0 2let numbers = [1, 2, 3, 4, 5] 3for value in numbers { 4 sum += value 5}

というようになると思いますが、最初にsumに代入する0がreduce(0)の0、$0は変数sum, $1は変数valueという解釈で良いと思います。

投稿2016/03/04 06:35

AOKINAO

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Blue0999

2016/03/04 07:04

for文の例でイメージを掴めました、ありがとうございます!
Blue0999

2016/03/04 07:05

という事は配列numbersは$1にreduceの横の0は$0に代入されているということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問