かずおの開発ブログ(主にRuby)

日々の開発のことを色々書きます。

Rubyチートシート

たまに使おうと思うと忘れていて毎回リファレンスを見る→理解する→書くが面倒なので、自分が一瞬で思い出せるようにメモ。

文字列処理

特定の文字列を切り出したい

  • slice : 何文字目から何文字分切り出すって時に使う。戻り値は切り取られた値。[]と同義。
str = "hello"
str.slice(0, 2)  => "he" # str[0,2]と同義
str.slice(/\w+/) => "hello" # 正規表現も使える
  • match : 正規表現を引数にしてMatchDataを返す。(MatchDataに対する理解がイマイチ)
str = "おじいさんは山へ芝刈りにおばあさんは川へ洗濯に行きました。
str.match(/おじいさん/)
=> #<MatchData "おじいさん">
特定の文字列にマッチするものを全て切り出したい
  • scan : マッチしたものを全て配列に格納して返す
str = "hello goodmorning goodnight" 
str.scan(/\w+/)
=>["hello", "goodmorning", "goodnight"]

特定の文字列を特定の文字列で置換したい

  • gsub
str = "good morning hello good night"
str.gsub("good", "great")
=> "great morning hello great night"

特定の文字列を削除したい

  • delete: 特定の文字列を削除したい時に使う。削除する文字列があった場合は削除後の文字列、ない場合はnilが戻り値になる。
str = "hejamallojama"
str.delete("jama") => "hello"
str.delete("nai")    => nil

配列

配列をくっつけて文字列にしたい

  • join
array = ["東京", "大阪", "名古屋"]
array.join("|")
=> "東京|大阪|名古屋"

配列から特定の条件に合う要素を取得したい

  • select : ブロック内の条件に合う要素を配列で返す
array = %i(10 20 30 40)
array.select{|num| num > 20}
=> [30, 40]
array.select{|num| num > 30}
=> [40] #要素が1つでも配列として返るので注意が必要
array.select{|num| num > 50}
=> []

その他よく忘れる系

  • tap :tapメソッドは、ブロック変数にレシーバ自身を入れてブロックを実行します。戻り値はレシーバ自身です。メソッドチェーンの中にtapメソッドをはさみ込み、ソースコードを簡潔にする目的で使われます。ポイントはブロック内にレシーバ自身が入ること。 理解するためだけの単純な例
array = [10, 20, 30]
array.tap{ |array| array << 40 } #array自身がブロックに渡される。
=> [10, 20, 30, 40]