配列要素の最後から～最初から～の操作まとめ

Rubyを学習していて、配列操作するメソッド絡みで最初から何番目とか最後から何番目とかの
メソッドが色々あったので、まとめてみました。←　説明テキトーですみません。。。
※ Arrayクラスのメソッドを前提にしております。
※ バージョンは、ruby 2.6.3で動作確認しました。

# take
配列の先頭から引数n個の要素を取り出して、新しい配列を作成して返す。
[参考リファレンス](https://ref.xaio.jp/ruby/classes/array/take)

```ruby:
pry(main)> array = [1, 2, 3, 4, 5, 6, 7]
=> [1, 2, 3, 4, 5, 6, 7]

pry(main)> array.take(3)
=> [1, 2, 3]

# 引数に要素数よりも大きい整数を入れてもエラーでない。
pry(main)> array.take(9)
=> [1, 2, 3, 4, 5, 6, 7]

# 元の配列は変更されていない。
pry(main)> array
=> [1, 2, 3, 4, 5, 6, 7]

# 引数0は空の配列を返す。
pry(main)> array.take(0)
=> []

# 引数なしはエラーとなる。
pry(main)> array.take
ArgumentError: wrong number of arguments (given 0, expected 1)
pry(main)> array.take()
ArgumentError: wrong number of arguments (given 0, expected 1)

# 引数に負の数はとれない。
pry(main)> array.take(-1)
ArgumentError: attempt to take negative size

# 空の配列に対して呼び出すと空配列を返す。
pry(main)> array = []
=> []
pry(main)> array.take(3)
=> []
```

# drop
配列の先頭から引数n個の要素を取り除き、残りで新しい配列を作成して返す。
[参考リファレンス](https://ref.xaio.jp/ruby/classes/array/drop)

```ruby:
pry(main)> array = [1, 2, 3, 4, 5, 6, 7]
=> [1, 2, 3, 4, 5, 6, 7]

pry(main)> array.drop(3)
=> [4, 5, 6, 7]

# 引数に要素数よりも大きい整数を入れてもエラーでない。
pry(main)> array.drop(9)
=> []

# 元の配列は変更されていない。
pry(main)> array
=> [1, 2, 3, 4, 5, 6, 7]

# 引数0は元の配列をそのまま返している。
pry(main)> array.drop(0)
=> [1, 2, 3, 4, 5, 6, 7]

# 引数なしはエラーとなる。
pry(main)> array.drop()
ArgumentError: wrong number of arguments (given 0, expected 1)
pry(main)> array.drop
ArgumentError: wrong number of arguments (given 0, expected 1)

# 引数に負の数はとれない。
pry(main)> array.drop(-1)
ArgumentError: attempt to drop negative size

# 空の配列に対して呼び出すと空配列を返す。
pry(main)> array = []
=> []
pry(main)> array.drop(3)
=> []
```

# first
配列の最初の要素を返す。配列が空のときはnilを返す。
引数に整数を指定すると、先頭からその数だけ要素を取り出して、配列にして返す。
配列が空のときは空の配列を返す。
[参考リファレンス](https://ref.xaio.jp/ruby/classes/array/first)

```ruby:
pry(main)> array = [1, 2, 3, 4, 5, 6, 7]
=> [1, 2, 3, 4, 5, 6, 7]

# 引数なしの時は、その配列の一番最初の要素を返す。※配列としては返さない。
pry(main)> array.first
=> 1

# 引数ありの時は、takeメソッドと同様、先頭からその数だけ要素を取り出して、配列にして返している。
pry(main)> array.first(3)
=> [1, 2, 3]

# 引数に要素数よりも大きい整数を入れてもエラーでない。
pry(main)> array.first(10)
=> [1, 2, 3, 4, 5, 6, 7]

# もちろん、元の配列は変更されていない。
pry(main)> array
=> [1, 2, 3, 4, 5, 6, 7]

# 引数0は空の配列を返す。
pry(main)> array.first(0)
=> []

# 引数に負の数はとれない。
pry(main)> array.first(-1)
ArgumentError: negative array size

# 空の配列の時
pry(main)> array = []
=> []
pry(main)> array.first
=> nil
pry(main)> array.first(4)
=> []
```

# last
配列の最後の要素を返す。配列が空のときはnilを返す。
引数に整数を指定すると、末尾からその数だけ要素を取り出して、配列にして返す。
配列が空のときは空の配列を返す。
[参考リファレンス](https://ref.xaio.jp/ruby/classes/array/last)

```ruby:
pry(main)> array = [1, 2, 3, 4, 5, 6, 7]
=> [1, 2, 3, 4, 5, 6, 7]

# 引数なしの時は、その配列の一番最後の要素を返す。※配列としては返さない。
pry(main)> array.last
=> 7

# 引数ありの時は、末尾からその数だけ要素を取り出して、配列にして返している。
pry(main)> array.last(2)
=> [6, 7]

# 引数に要素数よりも大きい整数を入れてもエラーでない。
pry(main)> array.last(10)
=> [1, 2, 3, 4, 5, 6, 7]

# もちろん、元の配列は変更されていない。
pry(main)> array
=> [1, 2, 3, 4, 5, 6, 7]

# 引数0は空の配列を返す。
pry(main)> array.last(0)
=> []

# 引数に負の数はとれない。
pry(main)> array.last(-1)
ArgumentError: negative array size

# 空の配列の時
pry(main)> array = []
=> []
pry(main)> array.last
=> nil
pry(main)> array.last(2)
=> []
```

# shift
配列の最初の要素を削除し、その要素を返す。
レシーバ自身を変更するメソッド。※破壊的
配列が空のときはnilを返す。
引数に整数を指定すると、配列の最初からその数だけ要素を取り除く。
戻り値は、取り除いた要素からなる配列。
要素数より大きい数を指定すると、エラーは出さずに要素をすべて取り除く。
[参考リファレンス](https://ref.xaio.jp/ruby/classes/array/shift)

```ruby:
pry(main)> array = [1, 2, 3, 4, 5, 6, 7]
=> [1, 2, 3, 4, 5, 6, 7]

# 戻り値は取り除いた要素になっている。
pry(main)> array.shift(3)
=> [1, 2, 3]

# 元の配列は破壊的に変更されている。
pry(main)> array
=> [4, 5, 6, 7]

# 引数0は空の配列が返される。
pry(main)> array.shift(0)
=> []

# 元の配列は変更なし
pry(main)> array
=> [4, 5, 6, 7]

# 引数に負の数はとれない。
pry(main)> array.shift(-1)
ArgumentError: negative array size

# 引数に要素数よりも大きい整数を入れてもエラーでない。
pry(main)> array.shift(11)
=> [4, 5, 6, 7]
pry(main)> array
=> []

# 空配列でもエラーでない。
pry(main)> array = []
=> []
pry(main)> array.shift(4)
=> []
```

# pop
配列の末尾の要素を削除し、その要素を返す。
レシーバ自身を変更するメソッド。※破壊的
配列が空のときはnilを返す。
引数に整数を指定すると、配列の末尾からその数だけ要素を取り除く。
戻り値は、取り除いた要素からなる配列。
要素数より大きい数を指定すると、エラーは出さずに要素をすべて取り除く。
[参考リファレンス](https://ref.xaio.jp/ruby/classes/array/pop)

```ruby:
pry(main)> array = [1, 2, 3, 4, 5, 6, 7]
=> [1, 2, 3, 4, 5, 6, 7]

# 戻り値は取り除いた要素になっている。
pry(main)> array.pop(3)
=> [5, 6, 7]

# 元の配列は破壊的に変更されている。
pry(main)> array
=> [1, 2, 3, 4]

# 引数0は空の配列が返される。
pry(main)> array.pop(0)
=> []

# 元の配列は変更なし
pry(main)> array
=> [1, 2, 3, 4]

# 引数に負の数はとれない。
pry(main)> array.pop(-1)
ArgumentError: negative array size

# 引数に要素数よりも大きい整数を入れてもエラーでない。
pry(main)> array.pop(7)
=> [1, 2, 3, 4]
pry(main)> array
=> []

# 空配列でもエラーでない。
pry(main)> array = []
=> []
pry(main)> array.pop(4)
=> []
```