Rails開発でよく使うRubyのメソッドをまとめてみた

##はじめに
仕事先でよく使うなと思ったRubyのメソッドを、分かりやすいサイトを参考にしつつまとめてみました。

注意点としてprintなどの出力メソッドは省略しているので、大半はirbで確認するくらいがちょうど良いかと思います。

##split
**要素を区切った配列を返します。**

```ruby
color = "blue yellow red"
color.split     
```

```
["blue", "yellow", "red"]
```
デフォルトでは上のように空白に沿って要素を区切りますが、
splitに引数を与えることで、その引数に応じて要素を区切ることができます。(以下の例)

```ruby
color = "blue,yellow,red"
color.split(",")   
```

```
["blue", "yellow", "red"]
```
ここでは、「,」で要素を区切っているのがわかると思います。
文字列で区切りたい場合は`color.split("")`とすると、`["b","l","u","e".....]`となります。

## join
joinはsplitの逆で、**配列を一つの文字列として連結します。**

```ruby
color = ["blue", "yellow", "red"]
color.join
```

```
"blueyellowred"
```

##unshift/push
unshiftを使えば、**引数であるオブジェクトを配列の先頭に入れることができます。**

```ruby
color = ["blue", "red", "yellow"]
color.unshift("black")
```

```
["black", "blue", "red", "yellow"]
```

pushでは、**引数であるオブジェクトを配列の末尾に入れることができます。**

```ruby
color = ["blue", "red", "yellow"]
color.push("black")
```

```
["blue", "red", "yellow", "black"]
```
配列 << 値　と同じですね。

##uniq
**配列の中で重複した要素を削除します。**

```ruby
num = [1, 2, 2, 3, 4, 5, 5]
num.uniq
```

```
[1, 2, 3, 4, 5]
```

##inject
主に、配列の中の要素を繰り返し計算する時に使います。
まずは例からみてみましょう。

```ruby
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) + **要素4**)  (((1 + 2) + 3) + **4**)
④ ((((要素1 + 要素2) + 要素3) + 要素4) + **要素5**)  ((((1 + 2) + 3) + 4) + **5**)

前回の戻り値(第一引数)に対して**第二引数(n)**が足されていってますね。
最終的には、第二引数(n)を最後まで足した第一引数(sum)が返ってくる感じです。

また、injectに引数を与えることで、初期値を設定することもできます。

```ruby
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といった**真偽値を返します。**

```ruby
name = ["taro", "hanako", "saki"]

name.include?("taro")
name.include?("yoshiki")

```

```
=> true
=> false
```

or文が多くなったときなど、条件分岐をしたいときに使えますね。

##map
要素の数だけブロックを繰り返し、**各要素に対してブロックを評価した新しい配列を返します。**

```ruby
["blue", "red", "yellow"].map { |color| color.upcase }   
```

```
["BULUE", "RED", "YELLOW"]
```

配列オブジェクトの要素一つ一つにupcase(大文字にする)処理を加え、新たな配列として返してますね。
**※collectも同じメソッドです**


##select
ブロックの戻り値が真のものだけを配列として返すメソッドです。

```ruby
color = ["blue", "red", "yellow", 1, 3]
color.select { |i| i.class == String }
```

```
["blue", "red", "yellow"]
```

ここでは、数値のもの(Integerクラス)を除き、文字列(Stringクラス)のものだけを返すようにしています。
配列の中からこの要素だけ取り出したい！ってときに使えますね。
**※find_allも同じメソッドです**
##reject
配列の戻り値が偽の要素だけを返します。
selectの逆ですね!

```ruby
color = ["blue", "red", "yellow", 1, 3]
color.reject { |i| i.class == String }
```

```
[1, 3]
```

##group_by
**各要素ごとに、ブロックを評価したグループ分けをすることができます。**
[配列].group_by { |i| i.( ) } で、キー(i)の値(配列)を取得。

```ruby
names = ["ruby", "pyshon", "php", "java"]
names.group_by {|i| i[0]}
```

```
{"r"=>["ruby"], "p"=>["pyshon", "php"], "j"=>["java"]}
```

この例では、要素の頭文字ごとにグルーピングしています。
ハッシュを返し、中身は　**キー => [配列]** という構成になっていますね。
rails上では、カラムの値ごとにグループ別に分けたい時なんかに大活躍してます。

##おわりに
現時点で仕事先でよく使うなと思ったメソッドを紹介してみました。
エンジニア2カ月目でまだまだわからないことばかりなので、今後も追記していきたいと思います。