【Ruby】配列の扱い方について逆引き形式でまとめてみた

# はじめに
Rubyの配列について、やりたいことから逆引きできるようにまとめてみました！

# 配列とは
配列とは、複数の値をまとめて格納できるオブジェクトのこと
```ruby:配列の例
fruits = ['りんご','みかん','ばなな'] #複数の値を一つまとめて変数として格納できる
```
上記の'りんご'や'みかん'など、<INS>配列内の各値を要素</INS>と呼ぶ
# 要素を設定したい場合
:::note info
 ＜記述方法＞
変数　= [値1,値2,...]
:::

```ruby
a = [1,2,3] #数値
b = ['a','b','c'] #文字列
c = ['a',1,0.5] #=> 異なる種類の型も可能
```
# 要素の取得関連
## 指定した位置の要素を取得したい場合
:::note info
 ＜記述方法＞
配列[位置]
:::
```ruby:要素の取得例
a = [1,2,3]
puts a[0] #=> 1
puts a[1] #=> 2
puts a[2] #=> 3
```
## 最後の要素を取得したい場合
:::note info
 ＜記述方法＞
+ 配列[-1]
+ 配列.last
:::
```ruby:最後の要素を取得した例
a = [1,2,3]
puts a[-1] #=> 3
puts a.last #=> 3
```
## 最初の要素を取得したい場合
:::note info
 ＜記述方法＞
+ 配列[0]
+ 配列.first
:::
```ruby:要素の取得例
a = [1,2,3]
puts a[0] #=> 1
puts a.first #=> 1
```

## n番目からm個分の要素を取得したい場合
:::note info
 ＜記述方法＞
配列[位置,個数]
:::
```ruby:3番目の要素から4個分の要素を取得する例
a = [1,2,3,4,5,6,7,8]
p a[2,4] #=>[3, 4, 5, 6]
```

# 要素を変更したい場合
:::note info
 ＜記述方法＞
配列[index] = 変更する値
:::
```ruby:要素の変更例
a = [1,2,3]
a[0] = "1" 
a[1] = "りんご"
a[2] = 0 

p a #=> ["1", "りんご", 0]
```
# 要素の追加関連
## 要素を追加したい場合
:::note info
 ＜記述方法＞
[] << 追加する値
:::
```ruby:要素の追加例
a = []
a << 1
a << 2
a << 3

p a #=> [1, 2, 3]
```
## 複数の値をまとめて配列に追加したい場合
:::note info
 ＜記述方法＞
配列.push(値1,値2,...)
:::
```ruby:複数の値を追加する例
a = [1,2,3,4,5,6,7,8]
a.push(9,10,11)
p a #=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
```
# 要素の削除関連
## 指定した値を削除したい場合
:::note info
 ＜記述方法＞
配列.delete(削除する値)
:::
```ruby:指定した要素を削除する例
a = [1,2,3,1]
a.delete(1)
p a #=>[2, 3]
```
## 指定した位置の要素を削除したい場合
:::note info
 ＜記述方法＞
配列.delete_at(位置)
:::
```ruby:指定した位置の要素を削除する例
a = [1,2,3,1]
a.delete_at(0)
p a #=>[2, 3, 1]
```
# 初期化関連
## 配列を初期化したい場合
:::note info
 ＜記述方法＞
+ 変数 = []
+ 変数 = Array.new
:::
```ruby:配列の初期化例
a = []
b = Array.new

p a #=>#[]
p b #=>#[]
```

## 〜個の要素を持つ配列を初期化したい場合
:::note info
 ＜記述方法＞
変数 = Array.new(要素数)
:::
```ruby:〜個の要素を持つ配列を初期化する例
a = Array.new(5)
p a #=>#[nil, nil, nl, nil, nil]

a = Array.new(5,0)
p a #=> [0, 0, 0, 0, 0]
```

# 配列を変数に分けて格納したい場合
:::note info
 ＜記述方法＞
変数1,変数2,変数3 = 配列
:::
```ruby:配列を変数に分けて格納した例
a = [1,2,3]
b,c,d = a
puts b,c,d

#=> 1
# 2
# 3
```
## 配列を変数に分けて格納したい場合(余りがでる場合)
:::note info
 ＜記述方法＞
変数1,変数2,*変数3 = 配列
:::
```ruby:配列を変数に分けて格納した例
a = [1,2,3,4,5]
b,c,d,*e = a
p b,c,d,e

#=> 1
# 2
# 3
# [4, 5]
```
# 連結関連
## 配列を連結させたい場合
:::note info
 ＜記述方法＞
配列a + 配列b 
:::
```ruby:配列を変数に分けて格納した例
a = [1,2,3] 
b = [3,4,5]

p a + b #=>[1, 2, 3, 3, 4, 5]
```

## 配列aに配列bを連結させたい場合
:::note info
 ＜記述方法＞
配列a.concat(配列b) 
:::
```ruby:配列aに配列bを連結させた例
a = [1,2,3] 
b = [3,4,5]

a.concat(b)
p a #=> [1, 2, 3, 3, 4, 5]
```
#集合関連
## 配列aと配列bの重複値を排除した配列cを生成する場合
:::note info
 ＜記述方法＞
配列a | 配列b
:::
```ruby:和集合の例
a = [1,2,3] 
b = [3,4,5]

c = a | b
p c #=> [1, 2, 3, 4, 5]
```

## 配列aと配列bに共通する値を格納した配列cを生成する場合
:::note info
 ＜記述方法＞
配列a & 配列b
:::
```ruby:積集合の例
a = [1,2,3] 
b = [3,4,5]

c = a & b
p c #=> [3]
```

## 配列aから配列bの値を排除した配列cを生成する場合
:::note info
 ＜記述方法＞
配列a - 配列b
:::
```ruby:差集合の例
a = [1,2,3] 
b = [3,4,5]

c = a - b
p c #=> [3]
```
# 配列展開関連
## 配列を展開して、複数の引数として使用する場合
:::note info
 ＜記述方法＞
*配列
:::
```ruby:配列の展開（splat展開）例
a = [1,2,3,4,5]

p a 
#=>[1, 2, 3, 4, 5]

p *a
#=>1
# 2
# 3
# 4
# 5
```

## 引数の数が可変なメソッドを定義する場合
:::note info
 ＜記述方法＞
def a(*引数)
end
:::
```ruby:引数の数が可変なメソッドを定義した例
def a(val1,val2,*val3)
    p val1
    p val2
    p val3
end

a(1,2,3,4,5,6)
#=>1
# 2
# [3, 4, 5, 6]
```

# 文字列⇨配列関連
## 文字列を値に持つ配列を簡潔に書く方法
:::note info
 ＜記述方法＞
%w(文字列１ 文字列２ 文字列３)　

＜結果＞
["文字列1","文字列2","文字列3"]
:::
```ruby:%w記法の例
a = ["a","b","c"]
b = %w(a b c)

p a #=>["a", "b", "c"]
p b #=>["a", "b", "c"]
```

## 文字列を値に持つ配列を簡潔に書く方法
:::note info
 ＜記述方法＞
%w(文字列１ 文字列２ 文字列３)　

＜結果＞
["文字列1","文字列2","文字列3"]
:::
```ruby:%w記法の例
a = ["a","b","c"]
b = %w(a b c)

p a #=>["a", "b", "c"]
p b #=>["a", "b", "c"]
```
## 文字列を一文字ずつ分割して配列にする場合
:::note info
 ＜記述方法＞
'abcde'.chars

＜結果＞
["a", "b", "c", "d", "e"]
:::
```ruby:文字列を分割して配列にする例
a = 'abcde'.chars
p a #=>["a", "b", "c", "d", "e"]
```

## 文字列を一文字ずつ分割して配列にする場合
:::note info
 ＜記述方法＞
'abcde'.chars

＜結果＞
["a", "b", "c", "d", "e"]
:::
```ruby:文字列を分割して配列にする例
a = 'abcde'.chars
p a #=>["a", "b", "c", "d", "e"]
```
## 文字列を指定の区切り文字毎に分割して配列にする場合
:::note info
 ＜記述方法＞
'abcde'.split(区切り文字)

＜結果＞
["a", "b", "c", "d", "e"]
:::
```ruby:文字列を指定の区切り文字毎に分割して配列にする例
a = 'a,b,c,d,e'.split(',')
p a #=>["a", "b", "c", "d", "e"]
``