【Ruby】メソッド備忘録

# firstメソッド
配列の先頭の要素を取得。

# lastメソッド
配列の末尾の要素を取得。

# pushメソッド
配列の末尾へ要素を追加。

# unshiftメソッド
配列の先頭へ要素を追加。

# popメソッド
配列の末尾の要素を削除。

# shiftメソッド
配列の先頭の要素を削除。

# eachメソッド
配列の全要素に対して、ブロック内の処理を実行。
```ruby:qiita.rb
drinks = ["コーヒー","カフェラテ","モカ"]
drinks.each do |drink|
  puts drink
end
=>コーヒー,カフェラテ,モカ
```
`||`パイプに挟まれたdrinkは変数。
1回目のループで変数`drink`に"コーヒー"が代入され、ブロック内の処理`puts drink`が実行される。
endへ到達すると、この回の処理は終わり。繰り返し対象の配列にまだ繰り返しが実行されていない要素があれば、`drinks.each do |drink|`に戻る。以降、繰り返し。

また`break`を用いることで、繰り返しを途中で終わらせる事もできる。
```ruby:qiita.rb
drinks = ["コーヒー","カフェラテ","モカ"]
drinks.each do |drink|
  break if drink == "モカ"
  puts drink
end
=>コーヒー,カフェラテ
```
また`next`を用いることで、繰り返し処理のその回をそこで終わりにして、次の会へ進むこともできる。
```ruby:qiita.rb
drinks = ["コーヒー","カフェラテ","モカ"]
drinks.each do |drink|
  next if drink == "カフェラテ"
  puts drink
end
=>コーヒー,モカ
```

# mapメソッド
配列の各要素へ処理を行い、変換してできた要素を持った、新しい配列を作る。
eachメソッドは各要素に対して、ブロック内の処理を行うことが目的。
mapメソッドは各要素を変換した新しい配列を得ることが目的。
```ruby:qiita.rb
result = [1,2,3].map do |x|
  x * 2
end
p result
=>[2,4,6]
```

また下記のように省略形もある。
```ruby:qiita.rb
# 通常形
result = ["abc","123"].map do |text|
  text.reverse
end
p result

# 省略形
result = ["abc","123"].map { |text| text.reverse }
p result

# さらに省略形
result = ["abc","123"].map(&:reverse) # ブロックで呼び出したいメソッドの先頭に：シンボルをつけ、先頭に&をつけて渡す。
p result

=>["cba", "321"] # 出力結果はいずれも同じ。
```


# joinメソッド
配列の要素を指定した文字列で結合して一つの文字列にする。
```ruby:qiita.rb
arr = ["Hello", "World", "Ruby"]
result = arr.join(" ")

puts result
=>"Hello World Ruby"
```
引数に何も渡さなければ、デフォルトで空文字列で結合される。
```ruby:qiita.rb
arr = ["a", "b", "c"]
result = arr.join

puts result
=>"abc"
```
# sizeメソッド
配列の要素数を返す。
```ruby:qiita.rb
puts [2,4,6].size
=>3
```

# sumメソッド
配列の全要素の合計値を返す。
```ruby:qiita.rb
puts [2,4,6].sum
=>12
```

先ほどのsizeメソッドと合わせる事で、平均値を求めることも可能。
```ruby:qiita.rb
a = [2,4,6]
puts a.sum / a.size
=>4
```

# uniqメソッド
配列から重複した要素を取り除いた新しい配列を返す。
```ruby:qiita.rb
array1 = [1,1,2]
array2 = array1.uniq
p array1 => [1,1,2]
p array2 => [1,2]
```
またuniqはブロック（do...endで終わるやつ。ここでは省略形で書いている{ |n| n.to_s}）を渡すこともできる。
```ruby:qiita.rb
p [1,2,3,"2","3"].uniq { |n| n.to_s}
=>[1,2,3]
```

# uniq!メソッド
uniqとの違いは、自分自身(array1)の配列オブジェクトを変更する点。uniqメソッドは自分自身の配列オブジェクトを変更することなく、変更後の新しい配列オブジェクト(array2)を作り、メソッドの戻り値として返している。
一方、uniq!は、自分自身の配列オブジェクトを変更している（破壊的変更）。
```ruby:qiita.rb
array1 = [1,1,2]
array2 = array1.uniq!
p array1 => [1,2]
p array2 => [1,2]
```

# sampleメソッド
配列からランダムに要素を取得する。
```ruby:qiita.rb
puts [1,2,3].sample
=>2 #ここはランダム
```

# shuffleメソッド
配列をランダムに並び替える。
```ruby:qiita.rb
puts [1,2,3].shuffle
=>[2,3,1] #ここはランダム
```

# sortメソッド
配列の要素を順に並び替える。要素が数字のときは、小さい順。要素が文字列のときは、abc順。大文字が混じると、大文字が先、小文字が後になる。
```ruby:qiita.rb
p [4,2,8].sort
p ["hitomi", "achi", "tama"].sort
p ["aya", "achi", "tama"].sort
p ["aya", "achi","Tama"].sort
=>[2, 4, 8]
=>["achi", "hitomi", "tama"]
=>["achi", "aya", "tama"]
=>["Tama", "achi", "aya"]
```

# reverseメソッド
配列の要素の並びが逆順になる。
```ruby:qiita.rb
p [4,2,8].reverse
p [4,2,8].sort #sortで小さい順に。
p [4,2,8].sort.reverse #sortで小さい順にした配列を、さらにreverseで逆順。
=>[8, 2, 4]
=>[2, 4, 8]
=>[8, 4, 2]
```

同様に文字列の並びも逆順にできる。
```ruby:qiita.rb
p "abcdefg".reverse
p "トクレセンタボービ".reverse
=>gfedcba
=>ビーボタンセレクト
```
# joinメソッド
配列の要素の文字列を連結して、一つの文字列にする。joinに引数（今回の場合は"と")を渡すと、各要素の間に引数で渡したものを入れる。引数とはメソッドへ渡すオブジェクトのこと。
```ruby:qiita.rb
puts ["カフェラテ","チーズケーキ","バニラアイス"].join
puts ["カフェラテ","チーズケーキ","バニラアイス"].join("と")
=>カフェラテチーズケーキバニラアイス
=>カフェラテとチーズケーキとバニラアイス
```

# splitメソッド
一つの文字列を分割し、分割したそれぞれの文字列を要素とした配列を返す。joinメソッドの逆Ver。引数に何も渡さない場合、デフォルトで空白スペースで区切る。
```ruby:qiita.rb
p "カフェラテ チーズケーキ バニラアイス".split
p "カフェラテとチーズケーキとバニラアイス".split("と")
=>["カフェラテ", "チーズケーキ", "バニラアイス"]
=>["カフェラテ", "チーズケーキ", "バニラアイス"]
```

# charsメソッド
charsメソッドは、その文字列を文字ごとの配列に変換するメソッド。
例えば、"QIITA"という文字列に対しては、["Q", "I", "I", "T", "A"]という配列を返す。
```ruby:qiita.rb
str = 'QIITA'
str.chars
=>["Q", "I", "I", "T", "A"]
```

# each_with_indexメソッド
配列の各要素に対し、その要素と要素のインデックス（位置）をブロックに渡して繰り返し処理を行うメソッド。
例えば、["Q", "I", "I", "T", "A"]という配列に対して、最初の繰り返しでは"Q"とそのインデックス0が渡される。次に"I"とインデックス1、その次に"I"とインデックス2、その次に"T"とインデックス３...という具合に続く。
```ruby:qiita.rb
str = 'QIITA'
 str.each_with_index do |word, index|
  p [word, index]
 end
=>["Q", 0]
  ["I", 1]
  ["I", 2]
  ["T", 3]
  ["A", 4]
```

# gsubメソッド
文字列のメソッドで、指定したパターンを他の文字列に置き換えるために使う。
```ruby:qiita.rb
sentence = "Hello, world. This is a test sentence."
sentence.gsub(/[.,]/, '')
=>"Hello world THis is a test sentence"
```
`/[.,]/`　これは正規表現と呼ばれるもので、コンマ , とピリオド . を意味している。角括弧`[]`を使うことで、その中のどれか一つにマッチすることを示している。
`''`　これが置き換える対象。今回は空文字列なので、コンマとピリオドを削除する形になる。
つまり、`sentence.gsub(/[.,]/, '')`は、sentenceから全てのコンマとピリオドを削除する処理を行っている。