よく忘れる標準入力関係とかPaizaで使えるメソッドメモ。
gets
- 入力した値の後ろが改行される。
name = gets
puts "私の名前は" + name + "です"
=> 佐藤
私の名前は佐藤
です
gets.chomp
- chompをつけることで入力値の後ろの改行をなくす。
name = gets.chomp
puts "私の名前は" + name + "です"
=> 佐藤
私の名前は佐藤です
split
- カンマや空白で区切られた文字列から、splitメソッドを使って配列を作る。(使用頻度高め)
下記のように一行で入力した情報を配列にしたい時などに使用。
# 標準入力時
佐藤 鈴木 高橋 山本 田中
users = gets.chomp.split
p users
=> ["佐藤","鈴木","高橋","山本","田中"]
paizaでよく使うsplitの使い方いろいろ
たとえば友達の人数と名前と年齢を表示するプログラムを組む際、
3
田中 21
高橋 18
坂本 24
のように入力しなくてはいけない場合、
num = gets.to_i
num.times do
s = gets.chomp.split(" ")
print "名前: #{ s[0] } , 年齢: #{ s[1] }\n"
end
とする。
map
- 配列の要素の数だけブロック内の処理を繰り返し、結果として作成された配列を返す。
name = ["1", "2", "3"]
name.map{|n| n.to_i}
=> [1,2,3]
# 上と同じ結果になる
name.map(&:to_i)
=> [1,2,3]
chars
- 文字列に対して使用でき、string.charsとすることで文字を1文字ずつ分割する。
number = 12345
p number.to_s.chars.map(&:to_i)
=> [1,2,3,4,5]
digits
- integerに使えるメソッドで、数字の各桁を取り出したい時に使う。数字は逆からになる。
number = 123456
p number.digits
=> [6,5,4,3,2,1]
digitsを使わないやり方だと少し遠回りになる
number = 123456
p number.to_s.chars.map(&:to_i).reverse
transpose
- 列と行を入れ替えるメソッド。
- 縦の票の合計とか計算するのに使える。
ary =[[1, 2],
[3, 4],
[5, 6]]
p ary.transpose
=>[[1, 3, 5],[2, 4, 6]]
count
- 引数を渡さない場合はレシーバの要素数を返す。
- 引数を1つ指定した場合はレシーバの要素のうち引数に一致するものの個数をカウントして返す(一致は == で判定)。
- ブロックを指定した場合は、ブロックを評価して真になった要素の個数をカウントして返す。
ary = [1, 2, 4, 2]
ary.count # => 4
ary.count(2) # => 2
ary.count{|x|x%2==0} # => 3
上記メソッドを使用した応用
配列の中に特定の数字が2個あるか確認(にじ)
array = [[1,2,4],[3,3,5]]
if array.map{|a| a.count(3)}.count(2)