はじめに
仕事先でよく使うなと思ったRubyのメソッドを、分かりやすいサイトを参考にしつつまとめてみました。
注意点としてprintなどの出力メソッドは省略しているので、大半はirbで確認するくらいがちょうど良いかと思います。
split
要素を区切った配列を返します。
color = "blue yellow red"
color.split
["blue", "yellow", "red"]
デフォルトでは上のように空白に沿って要素を区切りますが、
splitに引数を与えることで、その引数に応じて要素を区切ることができます。(以下の例)
color = "blue,yellow,red"
color.split(",")
["blue", "yellow", "red"]
ここでは、「,」で要素を区切っているのがわかると思います。
文字列で区切りたい場合はcolor.split("")
とすると、["b","l","u","e".....]
となります。
join
joinはsplitの逆で、配列を一つの文字列として連結します。
color = ["blue", "yellow", "red"]
color.join
"blueyellowred"
unshift/push
unshiftを使えば、引数であるオブジェクトを配列の先頭に入れることができます。
color = ["blue", "red", "yellow"]
color.unshift("black")
["black", "blue", "red", "yellow"]
pushでは、引数であるオブジェクトを配列の末尾に入れることができます。
color = ["blue", "red", "yellow"]
color.push("black")
["blue", "red", "yellow", "black"]
配列 << 値 と同じですね。
uniq
配列の中で重複した要素を削除します。
num = [1, 2, 2, 3, 4, 5, 5]
num.uniq
[1, 2, 3, 4, 5]
inject
主に、配列の中の要素を繰り返し計算する時に使います。
まずは例からみてみましょう。
num = [1, 2, 3, 4, 5]
num.inject() { |sum, n| sum += n }
15
まず、sumに要素1 + 要素2が入ります。そして第二引数であるnには、要素3, 要素4..というように入っていき、sumに足されていきます。
イメージとしてはこんな感じですね。↓ ↓
① (要素1+要素2) (1 + 2)
② ((要素1 + 要素2) + 要素3) ((1 + 2) + 3)
③ ((要素1 + 要素2) + 要素3) + 要素4) (((1 + 2) + 3) + 4)
④ ((((要素1 + 要素2) + 要素3) + 要素4) + 要素5) ((((1 + 2) + 3) + 4) + 5)
前回の戻り値(第一引数)に対して**第二引数(n)**が足されていってますね。
最終的には、第二引数(n)を最後まで足した第一引数(sum)が返ってくる感じです。
また、injectに引数を与えることで、初期値を設定することもできます。
num = [1, 2, 3, 4, 5]
num.inject(10) { |sum, n| sum += n }
25
① (初期値 +要素1) (10 + 1)
② ((初期値 + 要素1) + 要素2) ((10 + 1) + 2)
③ (((初期値 + 要素1) + 要素2) + 要素3) (((10 + 1) + 2) + 3)
.....
単に0だった初期値を10にしただけなので、10 + 15 で25という結果になります。
include
配列に対して、渡された引数が含まれていたらtrue,含まれてなければfalseといった真偽値を返します。
name = ["taro", "hanako", "saki"]
name.include?("taro")
name.include?("yoshiki")
=> true
=> false
or文が多くなったときなど、条件分岐をしたいときに使えますね。
map
要素の数だけブロックを繰り返し、各要素に対してブロックを評価した新しい配列を返します。
["blue", "red", "yellow"].map { |color| color.upcase }
["BULUE", "RED", "YELLOW"]
配列オブジェクトの要素一つ一つにupcase(大文字にする)処理を加え、新たな配列として返してますね。
※collectも同じメソッドです
select
ブロックの戻り値が真のものだけを配列として返すメソッドです。
color = ["blue", "red", "yellow", 1, 3]
color.select { |i| i.class == String }
["blue", "red", "yellow"]
ここでは、数値のもの(Integerクラス)を除き、文字列(Stringクラス)のものだけを返すようにしています。
配列の中からこの要素だけ取り出したい!ってときに使えますね。
※find_allも同じメソッドです
reject
配列の戻り値が偽の要素だけを返します。
selectの逆ですね!
color = ["blue", "red", "yellow", 1, 3]
color.reject { |i| i.class == String }
[1, 3]
group_by
各要素ごとに、ブロックを評価したグループ分けをすることができます。
[配列].group_by { |i| i.( ) } で、キー(i)の値(配列)を取得。
names = ["ruby", "pyshon", "php", "java"]
names.group_by {|i| i[0]}
{"r"=>["ruby"], "p"=>["pyshon", "php"], "j"=>["java"]}
この例では、要素の頭文字ごとにグルーピングしています。
ハッシュを返し、中身は キー => [配列] という構成になっていますね。
rails上では、カラムの値ごとにグループ別に分けたい時なんかに大活躍してます。
おわりに
現時点で仕事先でよく使うなと思ったメソッドを紹介してみました。
エンジニア2カ月目でまだまだわからないことばかりなので、今後も追記していきたいと思います。