Quantcast
Viewing all articles
Browse latest Browse all 757

配列の掛け算について

rubyの問題でつまづいた箇所があるので記録として残しておきます。

問題内容をざっくり説明すると以下のとおりです。
・2つの数字が文字列として入力される("a b")・
最終的それぞれを2倍した数字を出したい

誤答
num = gets.split.map(&:to_i)
puts num * 2

1.splitメソッドで値を分割して配列に文字列の値を入れます。
2.map(&:to_i)で配列の値を数字に変換して配列を作成する。(map(&:to_i)に関しては以下の記事が大変わかりやすく、参考にさせていただきました。)
https://a-records.info/ruby-map-ampersand-colon-to_i/

3.配列の要素に対して*2を行う。

結果は以下のとおりになりました。

num = gets.split.map(&:to_i) // 5 10と入力する
puts num * 2
出力結果 => 5 10 5 10

なぜ@map(&:to_i)で数値に変換しているのに5 10が2回繰り返されているのかわからずにいました。

結論

・配列に対して掛け算を行うと同じ要素を繰り返した新しい配列が作られる。
各要素に対してではなく配列自体に*2を行っていたため要素が繰り返されていました。(わかってから見直すとそりゃそうだと思いますね...)

num = gets.split.map(&:to_i)
num.each {|n| puts n * 2}

eachで各要素に処理を行うことで解決しました。


Viewing all articles
Browse latest Browse all 757

Trending Articles