30代でジョブチェンジ

30代中盤、社会人経験約10年の男性です。転職をしてすぐに退職勧奨を受けて無職をしながらIT関連の学習をしていました。現在は業界で就労中です。

Ruby 入力の受け取り方

毎回、毎回、プログラミングの例題をとく時に入力の受け取り方がわからなくなる。
問題を解くために入力の値の受け取り方を振り返ることに嫌気がさしたので、
まとめておく。
 

一行受け取る場合

x = gets

x はstringになるので、

x = gets.to_i 

 こうすることでxを数字にしてしまおう。 

 

一行に半角を開けて複数の数値が並んでいる場合

入力で

2 3

こんな感じになっていて、それぞれを別の変数で取り扱いたいとき、

二つの数字を足すとか掛けるとかしたい時、

x, y= gets.split

あらかじめ二つの変数を用意しする。そうすれば2はxに3はyに格納される。

ここで、変数を1つにすると、

x = gets.split

xに2つとも格納される。

複数行受け取る場合

x = readlinesx.class

結果はArrayになる。このArrayの要素は改行込みのStringとなる。

入力が、

2

 こんな感じで2行になっている場合、変数xはこんな内容

x = ["2\n", "3\n"] 

xはArrayとなるので、要素一つ一つに何かしようとすると、eachを使って、書き換える必要がある。

x.each do |i| i.chomp.to_i end

 こうすることでxの中の要素一つ一つが数字になる。

 

複数行を受け取る場合2

while line = gets

 コード

end

こんなやり方もあるらしい。while endでくくった中に記述をするパターン

1行で複数個の数字を受け取る場合

x = gets.split(" ").map!{|i | i.to_i} 

getsで受け取るとStringになるのでsplitで1文字づつ分けて受け取る。

splitで受け取ったものはArrayになるので、破壊的なmapを使って、1文字ずつIntegerに直す。そうするとxは数字の要素が含まれている配列になる。

あらかじめ、受け取る要素の数がわかっている場合は、

x, y = gets.split(" ").map!{|i| i.to_i}

x, y, z = gets.split(" ").map!{|i| i.to_i}  

などとすることで直接、変数名で要素を指定できる。