【Ruby】学んだメソッドをアウトプット

最近Rubyの問題をpaizaラーニングで解き始めたので学んだことをアウトプットしていきます。

chompメソッドで末尾の改行文字を削除

chompは文字列の末尾に改行コードがあった場合に、文字列の末尾の改行コードを削除してくれる

# 標準入力で値を取得する場合
a = gets.to_s
b = gets.to_s.chomp
p a
p b

# =>"Z\n"
# =>"Z"


Array.new(n)で欲しい長さの配列を作成

  • 問題:整数 n と n 個の数 a_1, ..., a_n が改行区切りで与えられる。与えられた a_1, ..., a_n の中で最も大きい数を出力する
    例) 整数nが2の場合、例えば4と7が改行区切りで与えられる。そのうちの大きい数の7を出力する
n = gets.to_i # 整数で値を取得

ary = Array.new(n) # 上記で取得したn個の長さの配列を作成
n.times { |i| ary[i] = gets.to_i } # 作った配列に改行区切りで与えられる数を入れていく。
puts ary.max # 配列に入った数の中で一番大きな数を出力


joinメソッドで文字列を連結

整数 n が与えられるので、n 回、半角スペース区切りで paiza と出力する
例) 整数nが2の場合、「 paiza paiza」と出力する

n = gets.to_i # 整数で値を取得

ary = Array.new(n) # 上記で取得したn個の長さの配列を作成
n.times { |i| ary[i] = "paiza" } # 作った配列にpaizaを入れていく
puts ary.join(' ') # 最後にjoinを使って文字列を連結する


splitを使って文字列を分割

問題:整数 n が与えられ、その後に n 個の整数 a_1, ..., a_n が半角スペース区切りで与えられるので、a_1, ..., a_n をそのままの順番で改行区切りで出力する
例) 整数nが2の場合、例えば1と5が半角スペース区切りで与えられる。それを「1 5」という形で出力する

  • splitメソッドは文字列を分割して配列にするためのメソッド

  • 自分の回答

n = gets.to_i

ary = Array.new 
ary << gets.to_s.split(' ')
puts ary
  • mapを使うと短く書くことができる
n = gets.to_i

a = gets.split(' ').map(&:to_i)
puts a
  • map(&:to_i) は、標準入力から取得した文字列をsplitで分割したのち,全ての要素にto_iメソッドを適用している


sprintfを使って0埋めする

問題:標準出力で3桁までのランダムな値を受け取り、その値を0埋めにして3桁の数字を出す

  • 自分の回答
n = gets.to_s # 文字列として値を受け取る
if n.length == 1 # nが1桁の場合は2つの0を追加
  puts "00#{n}"
elsif n.length == 2 # nが2桁の場合は1つの0を追加
  puts "0#{n}"
else # nが3桁の場合はそのまま出力
  puts "#{n}"
end
  • sprintfを使うと短く書くことができる sprintf は「左寄せ」や、数値の「桁のゼロ埋め」や、「小数点以下の桁指定」など、文字列のフォーマットを指定したいときに便利なメソッド。sprintf( "フォーマット", 戻したい値 )の形式で引数を文字列で返す。
n = gets.to_i # 整数として値を受け取る

puts sprintf('%03d', n) #sprintfで与えられた引数を指定フォーマットの文字列として返す

<<sprintfのフォーマット>>
\r\n :表示を改行させる
%幅d : 整数値を指定の桁数で右詰めにする
%-幅d :整数値を指定の桁数で左詰めにする
%+幅d :整数値を符号付きで表示する
%0幅d : 整数値の余った空白をゼロで埋めする
%幅.小数点以下桁数f :小数点以下の桁数を指定する
%幅s :文字列を右詰めで表示する。
%-幅s :文字列を左詰めで表示します。


もっともっとrubyのスキルを向上させたいので継続していきたい!