lang = ["python", "ruby", "perl", "c#", "swift"]
result = lang.inject(0) { |i, s| s.size > i ? s.size : i}
puts result
Q.何と出力されるかという問題
【解説】
今回は、使うメソッドや演算子の基本の形をまずみていきます。
○injectメソッド
配列.inject(初期値){|第1引数, 第2引数| 処理}
参考:プロを目指す人ののためのRuby入門[改訂2版]p429伊藤淳一 技術評論社
○条件演算子(三項演算子)
式 ? 真だった場合の処理 : 偽だった場合の処理
参考:プロを目指す人ののためのRuby入門[改訂2版]p67伊藤淳一 技術評論社
○sizeメソッド
"文字列".size
で、文字列の文字数を返します。
上記injectメソッドと条件演算子(三項演算子)、sizeメソッドの問題です。
lang = ["python", "ruby", "perl", "c#", "swift"]
result = lang.inject(0) { |i, s| s.size > i ? s.size : i}
puts result
lang = ["python", "ruby", "perl", "c#", "swift"]
result = lang.inject(0) { |i, s|
部分は、
1回目のループではiに初期値0が入り、配列langの最初の要素”python”がsに入ります。
次に|i, s| s.size > i ? s.size : iの処理をします。これはsの文字数がiより大きければ、sの文字数を返し、そうでなければ、iの文字数を返す、といった処理です。
[1回目のループ処理内容]
1回目のループではiに初期値0が入り、配列langの最初の要素の”python”がsに入ります。
次に”python”の文字数(つまり6)とi(つまり0)を比べます。
s.size > iは、6>0となるので、真です。なので戻り値は6となります。
[2回目のループ処理内容]
2回目のループでは、iに6が入り、、配列langの2番目の要素の”ruby”がsに入ります。
次に”ruby”の文字数(つまり4)とi(つまり6)を比べます。
s.size > iは、4>6となるので偽です。なので戻り値は6となります。
[3回目のループ処理内容]
3回目のループでは、iに6が入り、、配列langの3番目の要素の”perl”がsに入ります。
次に”perl”の文字数(つまり4)とi(つまり6)を比べます。
s.size > iは、4>6となるので偽です。なので戻り値は6となります。
この処理を繰り返すと最も文字数の多い文字列の文字数が戻り値となります。
つまり、配列langの中で最も文字数の多い、resultの文字数の6が戻り値になります。
A.6