【Ruby】複数の値の入力や小数点以下の表示のやり方
rubyの問題を解いていた時にさっそくけ躓いたところ。
おそらくすぐ忘れるのでメモ。
複数の値を入力
問題でよくある最初の1行目に複数の値を入れるパターン。
スペースで入力するならこれでOK
inputs = gets.split puts inputs # 1 2 3 # => ["1", "2", "3"]
splitで受け取った値は配列化される。
しかし、このままだとStringで受け取っているので数字として扱えない。
入力した値を数字で扱うにはこうする。
inputs = gets.split nums = inputs.map(&:to_i) # 1 2 3 # => [1, 2, 3]
一行で書きたければこうする。
inputs = gets.split.map!{|i| i.to_i} # 1 2 3 # => [1, 2, 3]
受け取る要素を指定した変数に直接入れるにはこうする。
a, b, c = gets.split.map!{|i| i.to_i} puts b # 1 2 3 # => 2
スペースじゃなくてカンマで区切る場合はこうする。
inputs = gets.split(",").map!{|i| i.to_i} # 1,2,3 # => [1, 2, 3]
配列の順番変更
昇順にしたいときはsort!をつかう。
inputs = gets.split nums = inputs.map(&:to_i) nums.sort! # 1 7 3 5 # => [1, 3, 5, 7]
逆に降順にしたいときはsort!.reverse!でOK
inputs = gets.split nums = inputs.map(&:to_i) nums.sort!.reverse! # 1 7 3 5 # => [7, 5, 3, 1]
小数点以下の表示
rubyは基本的に整数を扱うので少数以下の表示がされなくなる。
こんな感じ。
a, b, c = gets.split.map!{|i| i.to_i} puts (a + b) / c # 3 4 2 # => 3
そこで、小数点以下も表示できるようにするため.to_fを分子につける。
a, b, c = gets.split.map!{|i| i.to_i} puts (a.to_f + b) / c # 3 4 2 # => 3.5
まとめ
このへんはテストでよく出てくるので、忘れないように!