railsチュートリアル４章〜Rubyの登場〜3節　配列と範囲演算子

#4.3.1 配列と範囲演算子

***"配列"*** と言われたら、特定の順序を持つ要素のリスト　➡︎　　["foo", "bar", "baz"]　こんなやつ



**⓵.splitメソッド**を使うと、文字列を自然に変換した配列を得ることができます。
--
```qiita
"foo bar     baz".split     
 ["foo", "bar", "baz"]      # 文字列を3つの要素を持つ配列に分割する
```
この操作によって、3つの文字列からなる配列が得られます。
>.splitで文字列を区切って配列にするときには空白を使うことで、勝手に配列に分割されました。


試しに"foobar  baz".splitとしてみます。今回はfoo と　barの間に空白がない

```qiita
["foobar", "baz"] 
このようになりなした。
＊splitで文字列を区切って配列にするときには空白を使うことで、勝手に配列に分割されました。空白を使うこと。
```

次のように他の文字を指定して区切ることもできます。

```
"fooxbarxbaz".split('x')  ➡️xで区切ってねの意味
["foo", "bar", "baz"]     ➡️区切られた
```


>***配列は　最初の要素の　インデックスを　ゼロから数えること。（ゼロオリジン）***
***上の場合、fooが０、barが１、bazが２という具合に数える。・・（プロゲートでもやった）***

```
a = [42, 8, 17]　　　　　　　　　　　　　　左から、0,1,2と数える
=> [42, 8, 17]
>> a[0]               ➡️aのゼロを指定
=> 42
>> a[1]
=> 8
>> a[2]
=> 17
>> a[-1]              # 配列の添字はマイナスにもなれる!
=> 17
```


```
>> a                  # 配列「a」の内容を確認する
=> [42, 8, 17]
>> a.first      ⇨最初の
=> 42
>> a.second       ⇨２番目の
=> 8
>> a.last
=> 17
>> a.last == a[-1]    # == を使って比較する
=> true
```

配列は様々なメソッドに応答するようです。

**x = a.length       # lengthメソッド・・文字数を教えてくれる。　x = aの文字数。ということ。aはさっきまで使ってた配列を定義している。**
----

```
=> 3
>> x == 3
=> true
>> x == 1
=> false
>> x != 1        
=> true
>> x >= 1
=> true
>> x < 1
=> false
```


```
>> a
=> [42, 8, 17]
>> a.empty?    ⇨中身空ですか？
=> false
>> a.include?(42)  ⇨42含まれる？
=> true
>> a.sort   ⇨小さい方から並べてるっぽい
=> [8, 17, 42]
>> a.reverse   ⇨逆さに並べた
=> [17, 8, 42]   
>> a.shuffle  ⇨かき混ぜた
=> [17, 42, 8]
>> a
=> [42, 8, 17]
```
　
##配列の内容　を　変更したい場合　は　そのメソッドに対応する***「破壊的」***メソッド　を使います。破壊的メソッドの名前には、元のメソッドの末尾に「!」を追加したものを使うのがRubyのルール

```
>> a
=> [42, 8, 17]
>> a.sort!       ⇨sortメソッドに！マークをつけた
=> [8, 17, 42] ⇨sort!が実行され・・・
>> a
=> [8, 17, 42]  ⇨aを開いてみるとソートされている。デフォルトの配列の順番が　メソッド!により破壊され、適応されている
```

## pushメソッド (または同等の<<演算子) を使って配列に要素を追加することもできます。

```
>> a.push(6)                  # 6を配列に追加する
=> [42, 8, 17, 6]
>> a << 7                     # 7を配列に追加する
=> [42, 8, 17, 6, 7]
>> a << "foo" << "bar"        # 配列に連続して追加する
=> [42, 8, 17, 6, 7, "foo", "bar"]
```

最後の例では、要素の追加をチェーン (chain) できることを示してある。
Rubyでは異なる型が配列の中で共存できます (上の場合は整数と文字列)。


上では、文字列を配列に変換するのにsplitを使いました。
#joinメソッドはこれと逆の動作です。

```
>> a
=> [42, 8, 17, 6, 7, "foo", "bar"]      ⇨文字列が配列に組み込まれている
>> a.join                       ⇨joinは 単純に連結する　ことを指す
=> "4281767foobar"
>> a.join(', ')                 # カンマ+スペースを使って連結する
=> "42, 8, 17, 6, 7, foo, bar"
```



範囲 (range) は、配列と密接に関係しています。to_aメソッドを使って配列に変換してみる

```
>> 0..9
=> 0..9
>> 0..9.to_a              # 9に対してto_aを呼んでしまっている
NoMethodError: undefined method `to_a' for 9:Fixnum
>> (0..9).to_a            # 丸カッコを使い、範囲オブジェクトに対してto_aを呼ぶ。
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　（）をつけてオブジェクトにしている
0..9 は範囲として有効ですが、上の2番目の表記ではメソッドを呼ぶ際にカッコを追加する必要があることを示しています。
```

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

範囲は、配列の要素を取り出すのに便利
 >> a = %w[foo bar baz quux]         # %wを使って文字列の配列に変換
=> ["foo", "bar", "baz", "quux"]
>> a[0..2]
=> ["foo", "bar", "baz"]
```

```
-1を使うと、配列の長さを知らなくても配列の最後の要素を指定することができ、これにより配列を特定の開始位置の要素から最後の要素までを一度に選択することができます。
>> a = (0..9).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>> a[2..(a.length-1)]               # 明示的に配列の長さを使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9]
>> a[2..-1]                         # 添字に-1を使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9]
```

次のように、文字列に対しても範囲オブジェクトが使えます。

```
>> ('a'..'e').to_a
=> ["a", "b", "c", "d", "e"]
```