Ruby便利メソッドまとめ：Array／Hash／Enumerator

## Array

* [Array#compact](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/compact.html)

`nil`を取り除いた配列を返す。

```rb
[1, nil, 2, nil, 3, nil].compact
 # => [1, 2, 3]
```

* [Array#concat](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/concat.html)

配列を連結する。

```rb
[1, 2, 3].concat([4, 5, 6])
 # => [1, 2, 3, 4, 5, 6]
```

`concat`で連結する場合：配列自身に連結する

```rb
a = [1, 2, 3]; p a.concat([4, 5, 6]); p a;
----------
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
----------
```

`+`で連結する場合：連結した結果を返す(配列自身は変更しない)

```rb
a = [1, 2, 3]; p (a + [4, 5, 6]); p a;
----------
[1, 2, 3, 4, 5, 6]
[1, 2, 3]
----------
```

* [Array#delete](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/delete.html)

指定した値と等しい要素を全て削除する。

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

a.delete(1)
 # => 1

p a
 # => [2, 3, 2]
```

* [Array#delete_if](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/delete_if.html)

条件が真になった要素を削除する。
`delete`と違い`delete_if`の結果は`self`を返す。

```rb
a = [0, 1, 2, 3, 4, 5]

a.delete_if{ |x| x % 2 == 0 }
 # => [1, 3, 5]

p a
 # => [1, 3, 5]
```

* [Array#include?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/include=3f.html)

配列の中に等しい値があればtrueを返す。

```rb
['a', 'b', 'c'].include?('a')
 # => true

['a', 'b', 'c'].include?('z')
 # => false
```

* [Array#find_index／Array#index](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/index.html)

条件に一致する最初の要素の位置を返す。

```rb
['a', 'b', 'c'].index('c')
 # => 2

['a', 'b', 'c'].index('z')
 # => nil
```

* [Array#join](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/join.html)

配列を指定した文字列で連結して返す。

```rb
['a', 'b', 'c'].join('-')
 # => "a-b-c"
```

* [Array#reverse／Array#reverse!](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/reverse.html)

配列を逆順にして返す。
`reverse!`の場合は破壊的に自身の配列を逆順に変更する。

```rb
['a', 'b', 'c'].reverse
 # => ["c", "b", "a"]
```

* [Array#sample](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/sample.html)

配列の中から指定した個数分、ランダムに抽出して返す。

```rb
['a', 'b', 'c'].sample
 # => "c"

['a', 'b', 'c'].sample(2)
 # => ["b", "a"]
```

* [Array#select](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/select=21.html)

条件に一致した要素を抽出する。

```rb
[1, 2, 3, 4, 5].select{ |x| x >= 3 }
 # => [3, 4, 5]
```

* [Array#shuffle](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/shuffle.html)

配列の要素をシャッフルして返す。

```rb
[1, 2, 3, 4, 5].shuffle
 # => [3, 5, 1, 2, 4]
```

* [Array#slice](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/slice.html)

指定した部分から抽出した部分配列を返す。

```rb
[1, 2, 3, 4, 5].slice(0, 3)
 # => [1, 2, 3]

[1, 2, 3, 4, 5].slice(2..4)
 # => [3, 4, 5]
```

* [Array#sort](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/sort.html)

要素を整列して返す。

```rb
['e', 'd', 'a', 'b', 'c'].sort
 # => ["a", "b", "c", "d", "e"]
```

* [Array#uniq](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-array/i/uniq.html)

重複を除いた配列を返す。

```rb
[2, 1, 5, 1, 3, 2, 4, 3].uniq
 # => [2, 1, 5, 3, 4]
```

## Hash

* [Hash#each／Hash#each_pair](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/each.html)

キーと値をブロックに渡す。

```rb
{ a: 1, b: 2, c: 3 }.each{ |key, value| puts "#{key} : #{value}" }
----------
a : 1
b : 2
c : 3
----------
```

* [Hash#each_key](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/each_key.html)

キーをブロックに渡す。

```rb
{ a: 1, b: 2, c: 3 }.each_key{ |key| p key }
----------
:a
:b
:c
----------
```

* [Hash#each_value](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/each_value.html)

値をブロックに渡す。

```rb
{ a: 1, b: 2, c: 3 }.each_value{ |value| p value }
----------
1
2
3
----------
```

* [Hash#has_key?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/key=3f.html)

指定した値がハッシュのキーとして存在すればtrueを返す。

```rb
{ a: 1, b: 2, c: 3 }.has_key?(:b)
 # => true

{ a: 1, b: 2, c: 3 }.has_key?(:z)
 # => false
```

* [Hash#has_value?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/value=3f.html)

指定した値がハッシュの値として存在すればtrueを返す。

```rb
{ a: 1, b: 2, c: 3 }.has_value?(3)
 # => true

{ a: 1, b: 2, c: 3 }.has_value?(30)
 # => false
```

* [Hash#keys](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/keys.html)

全てのキーを配列として返す。

```rb
{ a: 1, b: 2, c: 3 }.keys
 # => [:a, :b, :c]
```

* [Hash#values](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-hash/i/values.html)

全ての値を配列として返す。

```rb
{ a: 1, b: 2, c: 3 }.values
 # => [1, 2, 3]
```

## Enumerator

* [Enumerator#with_index](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerator/i/with_index.html)

```rb
['a', 'b', 'c', 'd', 'e'].each.with_index(1){ |value, index| puts "#{index} : #{value}" }
----------
1 : a
2 : b
3 : c
4 : d
5 : e
----------
```

* [Enumerable#all?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/all=3f.html)

全ての要素が真であればtrueを返す。

```rb
[1, 2, 3, 4, 5].all?
 # => true

[1, 2, 3, 4, 5, nil].all?
 # => false

[1, 2, 3, 4, 5].all?{ |x| x < 10 }
 # => true

[1, 2, 3, 4, 5].all?{ |x| x < 5 }
 # => false
```

* [Enumerable#none?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/none=3f.html)

全ての要素が偽であればtrueを返す。

```rb
[nil, false].none?
 # => true

[1, 2, 3, 4, 5].none?{ |x| x < 0 }
 # => true
```

* [Enumerable#any?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/any=3f.html)

1つでも真があればtrueを返す。

```rb
[1, 2, 3, 4, 5].any?{ |x| x >= 5 }
 # => true

[1, 2, 3, 4, 5].any?{ |x| x > 5 }
 # => false
```

* [Enumerable#one?](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/one=3f.html)

```rb
[1, 2, 3, 4, 5].one?{ |x| x == 4 }
 # => true

[1, 2, 3, 4, 5].one?{ |x| x <= 4 }
 # => false
```

* [Enumerable#count](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/count.html)

要素数を返す。

```rb
[1, 2, 3, 4, 5].count
 # => 5
```

* [Enumerable#each_slice](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/each_slice.html)

指定した個数で区切りブロックに渡す。

```rb
[1, 2, 3, 4, 5].each_slice(2){ |x| p x }
----------
[1, 2]
[3, 4]
[5]
----------
```

* [Enumerable#each_cons](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/each_cons.html)

指定した個数で区切り、1要素ずつズラしながらブロックに渡す。

```rb
[1, 2, 3, 4, 5].each_cons(2){ |x| p x }
----------
[1, 2]
[2, 3]
[3, 4]
[4, 5]
----------
```

* [Enumerable#partition](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/partition.html)

条件に一致する値と条件に一致しない値をそれぞれ別々の配列に振り分ける。

```rb
(1..10).partition{ |x| x % 3 == 0 }
 # => [[3, 6, 9], [1, 2, 4, 5, 7, 8, 10]]
```

* [Enumerable#take](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/take.html)

指定した個数分、先頭から抽出する。

```rb
[1, 2, 3, 4, 5].take(3)
 # => [1, 2, 3]
```

* [Enumerable#group_by](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/group_by.html)

評価結果をキーに、評価された要素を配列にしたハッシュを返す。

```rb
(1..10).group_by{ |x| x % 3 }
 # => {1=>[1, 4, 7, 10], 2=>[2, 5, 8], 0=>[3, 6, 9]}
```

* [Enumerable#min](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/min.html)

最小の値を返す。

```rb
[1, 2, 3, 4, 5].min
 # => 1
```

* [Enumerable#max](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/max.html)

最大の値を返す。

```rb
[1, 2, 3, 4, 5].max
 # => 5
```

* [Enumerable#minmax](http://miyamae.github.io/rubydoc-ja/2.0.0/#!/method/-enumerable/i/minmax.html)

最小の値と最大の値を配列にして返す。

```rb
[1, 2, 3, 4, 5].minmax
 # => [1, 5]
```