ruby  配列 基本操作まとめ

##はじめに
rubyの勉強をはじめたので、
自分の思考の整理、メモとして配列に関しての基礎的なことを書きます。

- `terminal`にて`irb`と打つことでコードを試すことができる。`exit`で終了
- 拡張子.rbのファイルにコードを記述して`terminal`にて`ruby ファイル名　`でコードを実行できる。
- `puts` `p`で表示できる。jsで言うところ`console.log()`
- コメントアウトは`#`

[ruby 繰り返し処理 基本操作まとめ](https://qiita.com/may88seiji/items/1995cd03414fc51b7246)

##生成　取得　追加　更新　削除

- 生成

```ruby
array = [] 
# []
array = [1,2,3] 
# [1,2,3]
```

- 連番  
範囲オブジェクトを利用  (first..last)  
`.to_a`　で配列(Array)にできる  
*範囲オブジェクト  
「..」演算子の左辺に最初の値を指定し右辺に最後の値を指定します。最初と最後の値には数値や文字列などのオブジェクトが指定可能

```ruby
 (1..5).to_a
# [1,2,3,4,5]
```

- 取得  
配列[index]の形式

```ruby
array  = ["a","b","c",nil]

p array[0]
#"a"
```

- 追加  
使用してないindexを指定して代入  
push()を使用　末尾に追加  
`<<`を使用

```ruby
array  = ["a","b","c","d"]
array[4] = "e"

p array
#["a", "b", "c", "d", "e"]

array.push("f")
p array
#["a", "b", "c", "d", "e", "f"]

array << 'hoge'
p array
#["a", "b", "c", "d", "e", "f", "hoge"]
```

- 更新  
更新したいindexを指定して代入

```ruby
array  = ["a","b","c","d"]
array[0] = "e"

p array
#["e", "b", "c", "d"]

```

- 削除  
deleteメソッドを使用  
引数に削除した要素を指定
indexを指定、空の配列を代入することで削除も可能

```ruby
array  = ["a","b","c","d","f"]
array.delete("a");

p array
#["b", "c", "d","f"]

#[index番号, 削除する個数]で指定
array[0,3] = []
p array
#["f"]

```

##insert 挿入
第一引数に挿入するindex 
第二引数に挿入する要素を指定

```ruby
array = (1..5).to_a
array.insert(3,777)
p array
# [1, 2, 3, 777, 4, 5]
```

##concat 配列の結合
引数に結合したい配列を指定

```ruby
arrayA  = ["a", "b", "c"]
arrayB  = ["d", "e", "f"]
arrayA.concat(arrayB)
p arrayA
#["a", "b", "c", "d", "e", "f"]
```

##join 結合した文字列の作成
引数に結合する際に使用するものを指定できる

```ruby
array  = ['ruby','javascript','php','python']
newArray = array.join(',')
p newArray
#"ruby,javascript,php,python"
```

##map 処理を加えて、新しい配列を生成  
`|a|`の部分に配列の各要素が渡されて処理される。

```ruby
array = (1..5).to_a
def map_test(array)
  array.map do |a|
    a*2
  end
end

newArray = map_test(array)
p newArray
p array

#[2, 4, 6, 8, 10]
#[1, 2, 3, 4, 5]
```

##select 選択 絞り込み

```ruby
array = (1..12).to_a
p array.select {|a| a % 2==0}

#[2, 4, 6, 8, 10, 12]

```

##uniq 重複の削除

```ruby
array = [1,1,2,2,2,3,4,4,5,8]
p array.uniq

#[1, 2, 3, 4, 5, 8]
```
##length size count 要素の数をかぞえる

- length sizeは基本的に同じ

```ruby
array  = ["a","b","c"]
str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."

p array.length
p str.length

#3
#123
```

- count  
引数を条件として、条件に合った要素の数だけを取得

```ruby
array  = ["a","b","c"]

p array.count("a");

#1
```
nil(無)を除いた要素数を数える

```ruby
array  = ["a","b","c",nil]
p array.size
p array.count{ |num| !num.nil? }

#4
#3
```

##push pop unshift shift
- push 末尾に追加
- pop 末尾を削除

```ruby
array  = ["a","b","c","d","e"]
array.push(1);
p array
#["a", "b", "c", "d", "e", 1]

array.pop
p array
#["a", "b", "c", "d", "e"]
```
- unshift 先頭に追加
- shift 先頭を削除

```ruby
array  = ["a","b","c","d","e"]
array.unshift(1);
p array
#[1, "a", "b", "c", "d", "e"]

array.shift
p array
#["a", "b", "c", "d", "e"]
```

##reverse　reverse! 反転  
reverseは反転して新しい配列を返す
reverse!は指定した配列そのものを判定して返す

```ruby
array  = ["a","b","c","d","e"]
newArray = array.reverse
p array
p newArray
#["a", "b", "c", "d", "e"]
#["e", "d", "c", "b", "a"]

array.reverse!
p array
#["e", "d", "c", "b", "a"]

```

##sort sort_by 並び替え 
- sort   
新しい配列を返す  
|a, b| の指定の仕方で昇順と降順を設定  
**昇順**  
`a <=> b`  
**降順**  
`b <=> a`  
降順の場合、
bがaより大きいときに1を返し、bがaより小さいときに-1を返す。bとaが等しいときは0を返す。
この返り値により、sortはbが大きいときはそのまま、bが小さいときはaと順番を入れ替る。bとaが等しいときにも何もしない挙動となる。

```ruby
array  = [4,7,8,2,8,3,5,0,9,1,3]
newArray = array.sort
p newArray
#[0, 1, 2, 3, 3, 4, 5, 7, 8, 8, 9]
```

```ruby
array  = [4,7,8,2,8,3,5,0,9,1,3]
newArray = array.sort{|a ,b| b<=>a}
p newArray
```

- sort_by  
`|a|`の部分に並び替えの条件を設定できる

```ruby
array  = ['ruby','javascript','php','python']
newArray = array.sort_by{|a| a.size}
p newArray
#["php", "ruby", "python", "javascript"]
```

降順には`reverse`を使う

```ruby
array  = ['ruby','javascript','php','python']
newArray = array.sort_by{|a| a.size}.reverse
p newArray

#["javascript", "python", "ruby", "php"]
```

まだまだありますが、とりえあえずここで止めます。
次は配列の繰り返し処理についてまとめたいと思います。