Ruby 配列 ブロックについて

# はじめに
- Rubyの配列やブロックの復習用
- 学習したことの備忘録
- 今回は1問1問式

# 学習した内容
- 配列(Arrayクラス）
- ブロック

# 参考にした教材
- [プロを目指す人のためのRuby入門]( https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976)
- [Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/doc/index.html)

# 配列(Arrayクラス）について
複数のデータをまとめて格納可能なオブジェクト

```rb
a = [1, 2, 3]

puts a[0] => 1
puts a[1] => 2
puts a[2] => 3

b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

puts b[0] => 1, 2, 3
puts b[1] => 4, 5, 6
puts b[2] => 7, 8, 9
puts b[3] => nil
```

<details><summary>変数aの配列の長さを取得したいとき</summary>

`sizeメソッド` 配列の長さを取得
```rb:例
a = [1, 2, 3]

puts a.size  => 3
```
</details>

<details><summary>変数aの配列の1番目の要素を変更したいとき</summary>

```rb:例
a = [1, 2, 3]
a[1] = 20

puts a  => 1, 20, 3
```
</details>

<details><summary>変数aの配列の最後に要素を追加したいとき</summary>

```rb:例
a = [1, 2, 3]
a << 4

puts a  => 1, 2, 3, 4
```
</details>

<details><summary>変数aの配列のn番目の要素を削除したいとき</summary>

`delete_atメソッド` 配列のn番目を削除
```rb:例
a = [1, 2, 3]

puts a.delete_at(1)  => 1, 3
```
</details>

<details><summary>わり算の商とあまりを配列で返したいとき</summary>

`divmodメソッド` 割った商qと余りrを、[q, r]という2要素の配列にして返す
```rb:例
q, r = 14.divmod(3)

puts q  => 4
puts r  => 2

```
</details>


# ブロックについて
メソッドの引数として渡すことができる処理のかたまり

```rb:以下A,Bは同じ結果を返す
# A
numbers = [1, 2, 3, 4, 5, 6]
s = 0
numbers.each do
    |n| s += n
end

puts s　=> 21

# B
numbers = [1, 2, 3, 4, 5, 6]
s = 0
numbers.each { |n| s += n } 
puts s　=> 21
```

<details><summary>変数numbersの配列の2の要素を削除したいとき</summary>

`deleteメソッド` 指定した値に一致する要素を削除
```rb:例
numbers = [1, 2, 3, 4, 5, 6]
numbers.delete(2) 

puts numbers => 1, 3, 4, 5, 6
```
</details>

<details><summary>変数numbersの配列の偶数要素をすべて削除したいとき</summary>

`delete_ifメソッド` 要素を順番にブロックに渡して評価し、その結果が真になった要素をすべて削除
```rb:例
numbers = [1, 2, 3, 4, 5, 6]
numbers.delete_if do |n| 
  n.even? # 偶数なら
end

puts numbers => 1, 3, 5
```
</details>

<details><summary>変数numbersの配列の全要素を合計したいとき</summary>

`sumメソッド` 要素の合計を求める
```rb:例
numbers = [1, 2, 3, 4, 5, 6]

puts numbers.sum => 21
```
</details>

<details><summary>初期値に10を与えた上で、変数numbersの配列の全要素を合計したいとき</summary>

`sumメソッド` 要素の合計を求める
```rb:例
numbers = [1, 2, 3, 4, 5, 6]

puts numbers.sum(10) => 31
```
</details>

<details><summary>変数numbersの配列の各要素を全て2倍にして新しい配列にしたいとき</summary>

`mapメソッド` ブロックの戻り値が新しい配列の各要素になる
```rb:例
numbers = [1, 2, 3, 4, 5]
new_numbers = numbers.map { |n| numbers * 2 } # それぞれ2倍

puts new_numbers => 2, 4, 6, 8, 10
```
</details>

<details><summary>変数numbersの配列の最初の偶数要素を取り出したいとき</summary>

`findメソッド` ブロックの戻り値が最初に真になった要素を返す
```rb:例
numbers = [1, 2, 3, 4, 5, 6]
even = numbers.find { |n| n.even? }

puts even　=> 2
```
</details>

<details><summary>変数numbersの配列の奇数要素を取り出したいとき</summary>

`selectメソッド` ブロックの戻り値が真の要素のみ集める
```rb:例
numbers = [1, 2, 3, 4, 5, 6]
odd = numbers.select do |n| 
  n.odd?
end

puts odd　=> 1, 3, 5
```
</details>

<details><summary>変数numbersの配列の奇数要素を排除したいとき</summary>

`rejectメソッド` ブロックの戻り値が偽の要素のみ集める
```rb:例
numbers = [1, 2, 3, 4, 5, 6]
even = numbers.reject do |n| 
  n.odd?
end

puts even　=> 2, 4, 6
```
</details>

# まとめ
- 基礎を体系的にまとめることができたと思う

⚠️学習4ヶ月目の初学者による投稿です。
⚠️間違いがあるかもしれません。ご容赦ください。
⚠️ご指導、ご教授いただけると幸いです。