Ruby初心者の学習過程まとめ記事#5

#はじめに
こんにちは。
この記事はRuby初心者の私がRubyを学習した過程をまとめた記事です。
目的は学習した内容を自分の手でまとめることで知識の定着をさせることです。
また、公開する事でたくさんの人の意見を聞くことが出来れば幸いです。
恐縮ではありますが、間違っている箇所や改善点があればご教示願います。

#学習環境
環境：AWS Cloud9
バージョン：Ruby２.５.1
教材：Udemy "はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"

#ハッシュ
<h5>ハッシュとは</h5>
キーと値の組み合わせでデータを管理するオブジェクトのこと
連想配列・ディクショナリ・マップと言う場合もある

<h5>ハッシュの作成</h5>
・{}で囲む
・キー => 値 といった形で作成
・複数格納する場合は,で区切る

例：キーと値の組み合わせが3つのハッシュ

```qiita.rb
names = {'name1' => 'Kensuke', 'name2' => 'Naoto', 'name3' => 'Takato'}
```
解説
nameと言う変数に、キーがname1値がKensuke、キーがname2値がNaoto、キーがname3値がTakato、のハッシュを代入

<h5>ハッシュから値を取り出す</h5>
ハッシュが入った変数[キー] で値が取り出せる

例：先程のハッシュから値Kensukeを取り出す

```qiita.rb
puts names['name1']
```
出力結果

```
Kensuke
```
解説：ハッシュnamesからキーがname1の値Kensukeを取り出す

<h5>ハッシュにキーと値を追加する</h5>
ハッシュが入った変数[追加したいキー] = 追加したい値　でキーと値を追加出来る

例：先程のハッシュにキー'name4'値'Shunsuke'を追加する

```qiita.rb
names['name4'] = 'Shunsuke'
puts names
```
出力結果

```
{"name1"=>"Kensuke", "name2"=>"Naoto", "name3"=>"Takato", "name4"=>"Shunsuke"}
```
解説：ハッシュnamesにキー'name4'値'Shunsuke'を追加して出力

<h5>値を変更する</h5>
ハッシュが入った変数[変更したい値のキー] = 変更後の値　で値を変更出来る

例：先程のハッシュのキー'name4'の値を'Ryotaro'に変更する

```qiita.rb
names['name4'] = 'Ryotaro'
puts names
```
出力結果

```
{"name1"=>"Kensuke", "name2"=>"Naoto", "name3"=>"Takato", "name4"=>"Ryotaro"}
```
解説：ハッシュnamesのキー'name4'の値を'Ryotaro'に変更して出力

<h5>キーを指定して値を削除する</h5>
ハッシュが入った変数.delete(削除したい値のキー)　で削除出来る

例：先程のハッシュのキー'name4'の値'Ryotaro'を削除する

```qiita.rb
names.delete('name4')
puts names
```
出力結果

```
{"name1"=>"Kensuke", "name2"=>"Naoto", "name3"=>"Takato"}
```
解説：ハッシュnamesのキー'name4'の値'Ryotaro'を削除して出力

<h5>ハッシュがどんなキーを持っているか確認する</h5>
変数.keys　で確認出来る

例：先程のハッシュがどんなキーを持っているのかを確認

```qiita.rb
puts names.keys
```
出力結果

```
name1
name2
name3
```
解説：ハッシュnamesがどんなキーを持っているかを確認して出力。name1,name2,name3を持っている

<h5>ハッシュがどんな値を持っているか確認する</h5>
変数.values　で確認出来る

例：先程のハッシュがどんな値を持っているのかを確認

```qiita.rb
puts names.values
```
出力結果

```
Kensuke
Naoto
Takato
```
解説：ハッシュnamesがどんな値を持っているかを確認して出力。Kensuke,Naoto,Takatoを持っている

<h5>指定したキーがあるか確認する</h5>
変数.has_key?(キー)　で確認出来る。キーがあればtrue、無ければfalseが返ってくる

例：先程のハッシュにキー'name1','name100'があるかを確認

```qiita.rb
puts names.has_key?('name1')
puts names.has_key?('name100')
```
出力結果

```
true
false
```
解説：ハッシュnamesにキー'name1'と'name100'があるかを確認して出力。'name1'はあるからtrue、'name100'は無いからfalseが出力される

<h5>ハッシュのサイズ（何個キー・値があるか）を確認する</h5>
変数.size　で確認出来る

例：先程のハッシュのサイズを確認

```qiita.rb
puts names.size
```
出力結果

```
3
```
解説：ハッシュnamesに何個キー・値があるかを確認して出力。3つある為3が出力される

#シンボルを使ったハッシュ
<h5>シンボルとは</h5>
ソースコード上では文字列のように見えるが内部では整数として扱われるオブジェクト
シンボルを使ったキーの方が文字列をキーに使う場合に比べてハッシュのアクセスが速い為、シンボルを使ったハッシュの方が好ましい

<h5>シンボルを使ったハッシュの定義</h5>
変数名 = {キー: 値, キー: 値}　で定義できる

例：先程のハッシュをシンボルを使って定義

```qiita.rb
names = {name1: 'Kensuke', name2: 'Naoto', name3: 'Takato'}
puts names
```
出力結果

```
{:name1=>"Kensuke", :name2=>"Naoto", :name3=>"Takato"}
```
解説：シンボルを使ったハッシュnamesを作成して出力。キーが文字列だが''は不要

<h5>シンボルを使った値の取り出し方</h5>
変数[:キー]　で取り出せる

例：先程のハッシュから値'Kensuke'を取り出す

```qiita.rb
puts names[:name1]
```
出力結果

```
Kensuke
```
解説：ハッシュnamesからキー:name1の値'Kensuke'を取り出して出力

<h5>シンボルを使った値の追加</h5>
変数[:追加したいキー] = 追加したい値　で値を追加出来る

例：先程のハッシュにキー：name4値'Shunsuke'を追加

```qiita.rb
names[:name4] = 'Shunsuke'
puts names
```
出力結果

```
{:name1=>"Kensuke", :name2=>"Naoto", :name3=>"Takato", :name4=>"Shunsuke"}
```
解説：ハッシュnamesにキー:name4値'Shunsuke'を追加して出力

<h5>シンボルを使った値の変更</h5>
変数[:変更したい値のキー] = 変更後の値　で値を変更出来る

例：先程のハッシュの値'Shunsuke'を'Ryotaro'に変更

```qiita.rb
names[:name4] = 'Ryotaro'
puts names
```
出力結果

```
{:name1=>"Kensuke", :name2=>"Naoto", :name3=>"Takato", :name4=>"Ryotaro"}
```
解説：ハッシュnamesの値'Shunsuke'を'Ryotaro'に変更して出力

<h5>シンボルを使った値の削除</h5>
変数.delete(:削除したい値のキー)　で削除出来る

例：先程のハッシュの値'Ryotaro'を削除

```qiita.rb
names.delete(:name4)
puts names
```
出力結果

```
{:name1=>"Kensuke", :name2=>"Naoto", :name3=>"Takato"}
```
解説：ハッシュnamesの値'Ryotaro'を削除して出力

#まとめ
今回はハッシュについてまとめました。次回は繰り返し処理についてまとめます。