ムーのしょ〜もない様でしょ〜もなくもないブログ

プログラミング未経験だけど、エンジニアになりたい、IT関係の仕事がしたい方向けに情報を発信しています!あっ!けどプログラミング以外にも皆さんに有益になる様な情報も発信しますよー!

Rubyで便利だなって思うあれこれ

正規表現で文字列の中から数字だけを取り出す

a = gets.chomp
↓
AWBWCWDWEWFWGWH
puts a.gsub(/[AEGIOSZ]/,"A" => "a", "B" => "b",
                       "C" => "c", "D" => "d", "F" => "f",
                       "G" => "g", "H" => "h")
↓
aWBWCWDWWFWgWH

[AEGIOSZ]←はこの中で当てはまるものだけって事


・1部分の文字を正規表現で消す(破壊的)

a = "aaabbbcccddd"
puts a.gsub!(/ccc+/, '')
↓
aaabbbddd

正規表現で文字列の置き換え

a = gets.chomp
↓
kamukayakarakauy
puts a.gsub(/(ka)/, "///")
↓
///mu///ya///ra///uy

・文字列になっている数字を数値に変換する

a = ["9", "9", "8", "6", "1"]
a.map(&:to_i)
↓
[9, 9, 8, 6, 1]

・配列に入っている数値の合計を求める

a = [9, 9, 8, 6, 1]
a.inject(:+)
↓
33

・配列の要素を半角スペース区切りで出力する

・1次元配列の場合

array = ["aaa", "bbb", "ccc"]
puts array.join(' ')
↓
aaa bbb ccc

・多次元配列の場合も一緒

array = ["aa", ["bb", "cc", ["dd", "ee"]], ["ff", "gg"]]
puts array.join(' ')
↓
aa bb cc dd ee ff gg

・絶対値を求める

a = gets.chomp.to_i
↓
-1 -98 5
p a.abs
↓
1 98 5

・printで空白スペースで出力したい

print 'foo',
print 123,
print 'bar'
↓
foo 123 bar

・繰り返し処理で横に出力したい時はprintメソッドを使う。

そして空白を空けたい時は

(i,(' '))

な書き方にする。

1.upto 5 do |i|
  print(i,(' '))
end
↓
1 2 3 4 5空白

けどこの時,5の横に空白がある状態,空白がない様に出力したい時は

1.upto 4 do |i|
  print(i,(' '))
end
5.upto 5 do |i|
  print i
end
↓
1 2 3 4 5

・配列のインデックス番号を全部取得したい時

ary = [5, 4, 1, 7, 3, 8]

p ary.each_with_index.select{|e, i| e >= 5}.map{|e| e[1]}
↓
[0, 3, 5]

他にも色々あるみたい

ary.each_with_index.each_with_object([]){|(e, i), acc| acc << i if e >= 5}

ary.each_with_index.select{|e, i| e >= 5}.map{|e| e[1]}

ary.each_with_index.each_with_object([]){|(e, i), acc| acc << i if e >= 5}

ary.flat_map.with_index{|e,i|e>=5 ? i : []}