【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

まとめ

このへんはテストでよく出てくるので、忘れないように!