- 公開日: 2020年10月31日
【初心者向け】Rubyの配列とハッシュ〜基礎編〜
「配列やハッシュが何を表しているのか分からない」
「どのように配列やハッシュを使えば良いの?」
Rubyを学習している方の中には、このように感じている方もいるのではないでしょうか。配列やハッシュはRubyに限らず、Ruby on Railsでも頻繁に使用する重要な概念です。
またPythonやJavascriptなどのプログラミング言語でも使用するため、Rubyの配列やハッシュを理解しておくと、その他の言語の習得もスムーズになります。そこで今回は配列とハッシュについて分かりやすく解説していきます。
- Rubyの実行環境を作ろう
- Rubyの配列とは
- Rubyの配列を使ってみよう
- 配列を表示させよう
- 実行結果
- 山田
- 田中
- 小川
- 本田
- 配列から要素を取り出そう(基礎編)
- 名前のデータ
- 名前を表示する
- 実行結果
- 名前は山田です。
- 名前は田中です。
- 名前は小川です。
- 名前は本田です。
- 実行結果
- 名前は山田です。
- 名前は田中です。
- 名前は小川です。
- 名前は本田です。
- 配列から要素を取り出そう(応用編)
- 実行結果
- 0番目は山田です
- 1番目は田中です
- 2番目は小川です
- 3番目は本田です
- 実行結果
- 1番目は山田です
- 2番目は田中です
- 3番目は小川です
- 4番目は本田です
- Rubyのハッシュとは
- ユーザー情報
- 名前:山田
- 年齢:25
- 身長:170
- Rubyのハッシュを使ってみよう
- ハッシュを表示させよう
- ハッシュから要素を取り出そう(基礎編)
- 実行結果
- 山田
- 28
- 185
- ハッシュから要素を取り出そう(応用編)
- 実行結果
- 山田
- 25
- 175
- eachメソッドを使わない場合
- まとめ
Rubyの実行環境を作ろう
配列やハッシュを使用する前にRubyの実行環境を作っていきます。
今回は環境構築をおこなわずにプログラムを実行できるreplitというサービスを使います。replitは自分の書いたコードがどのように動くのかをすぐに確認したい時などにおすすめです。
まずは以下手順でreplitの実行環境を作成してください。
①ブラウザでreplitを開く
②検索窓で「Ruby」を検索
③「Create repl」ボタンをクリック
④下の実行画面が現れるのを確認
⑤ソースコード部分に下記コードを貼り付け実行する
print ”Hello Ruby”
replitは下画像のように「ファイル一覧」「ソースコード」「実行結果」の3つに分かれています。以降で紹介するコードは全てソースコード部分に書いていきます。
Rubyの配列とは
まずは配列について簡単に説明していきます。配列とはある要素(オブジェクト)を1つのかたまりとして格納したものです。
配列では下記のように””の中へ要素(オブジェクト)を保管します。保管できる要素は”山田”などの文字列や10などの数値列など様々です。
配列名 = [要素A,要素B,要素C,.......]
またRubyには配列の中の要素を区別するためにindex(インデックス)という概念があります。「要素の順番」と「index」の値が異なることに注意しましょう。
例えば1番目の要素であるAはindexが0となり、index = 順番-1という関係になっています。ちなみにこの順番とindexの関係性はJavascriptやPythonなど他の言語でも共通です。
Rubyの配列を使ってみよう
この章ではrepliitを使って実際に配列のコードを書いていきます。
配列を表示させよう
まずは下記コードをrepitのソースコード部分に貼り付けて実行してください。namesが配列名で[ ]の中身が要素となります。
names = ["山田","田中","小川","本田"]
p names
コードの「p」はpメソッドと呼ばれており、p以降の引数が持つオブジェクトをそのまま出力するメソッドです。主にデバッグ(コードのエラーを修正すること)などで期待した値が返ってきているかなどを確認するために使用します。
次に上記コードを下記のように変更して実行してください。
names = ["山田","田中","小川","本田"]
puts names[0]
puts names[1]
puts names[2]
puts names[3]
#実行結果
#山田
#田中
#小川
#本田
そうすると配列の中身を取り出せました。このように配列[インデックス番号]とすることで自由に配列の中身を取り出せます。
ここまでで配列がどのようなものか理解できたかと思います。しかし「配列でまとめると何が良いのか分からない」と感じている方もいるかもしれません。
次の章で配列を要素から取り出す例を用いて、メリットについて解説していきます。
配列から要素を取り出そう(基礎編)
まずは下記コードをreplitに貼り付けて実行してください。
補足ですが文字列の中に変数を含める場合は、変数の部分を「#{変数名}」とする必要があります。今回の場合、name1やname2の部分が変数です。
# 名前のデータ
name1 = "山田"
name2 = "田中"
name3 = "小川"
name4 = "本田"
# 名前を表示する
puts "名前は#{name1}です。"
puts "名前は#{name2}です。"
puts "名前は#{name3}です。"
puts "名前は#{name4}です。"
#実行結果
#名前は山田です。
#名前は田中です。
#名前は小川です。
#名前は本田です。
上記コードで期待する結果は得られるのですが、「名前は」や「#{name}」の部分を手動で書いていく必要があります。</br>仮に名前のデータが100個あれば大変な作業ですね。
そこでここまで学習してきた配列の考え方が役に立ちます。先程のコードをコメントアウトして、その下に下記コードを貼り付けてください。</br>コードを選択し「Command + /」を押すとコメントアウトが可能です。
```Ruby
names = ["山田","田中","小川","本田"]
names.each do |name|
puts "名前は#{name}です"
end
#実行結果
#名前は山田です。
#名前は田中です。
#名前は小川です。
#名前は本田です。
eachメソッドで配列から要素を1人ずつ取り出せます。実行結果はeachを使わない場合と同じ結果が得られました。
このようにデータを配列にまとめることで、簡単にデータを取り出せるのがメリットです。
配列から要素を取り出そう(応用編)
この章ではもう少し複雑な配列から要素を取り出す例を解説していきます。例えば配列から要素を取り出す場合に、その要素の順番も取り出したい場合を考えていきましょう。
まずは下記コードをreplitに貼り付けて実行してください。
names = ["山田","田中","小川","本田"]
names.each_with_index do |name,index|
puts "#{index}番目は#{name}です"
end
#実行結果
#0番目は山田です
#1番目は田中です
#2番目は小川です
#3番目は本田です
配列の要素だけでなく、indexも取り出したい場合は「each_with_index」を使用します。
結果の出力はされたのですが、順番が0番目から始まっており不自然ですね。これは要素の順番とindexの値が異なるためです。
では先程のコードを下記のように変更して実行してみましょう。順番が自然に表示されることを確認してください。
names = ["山田","田中","小川","本田"]
names.each_with_index do |name,index|
puts "#{index+1}番目は#{name}です"
end
#実行結果
#1番目は山田です
#2番目は田中です
#3番目は小川です
#4番目は本田です
このようにeachやeach_with_indexメソッドを使えば、配列から自由に要素を取り出せます。
Rubyのハッシュとは
次にRubyのハッシュについて解説していきます。配列は下記コードのように同じ種類のデータしか格納できません。
names = [“山田”,”田中”,”平田”]
仮に名前や性別、身長などユーザー1人ずつの情報をまとめたい時に配列は使えません。例えば、次のようにユーザー情報を配列にした場合、中身の要素が何を表しているのか分からないですね。
# ユーザー情報
#名前:山田
#年齢:25
#身長:170
yamada_info = ["山田",25,170]
このように異なる種類の情報をまとめるのが「ハッシュ」です。ハッシュは次のように{ }の中に『key(キー)』と『value(バリュー)』の組み合わせを格納します。
yamada_info = {name:”山田”, age:25, height:170}
キーの名称は自由につけられますが、直感的にバリューが何を表しているのか分かるようにしてください。また配列と同じようにハッシュから中身の要素を取り出すせます。
Rubyのハッシュを使ってみよう
この章ではメソッドを使った要素の取り出し方を解説していきます。
ハッシュを表示させよう
まずは下記コードを貼り付けて実行してみましょう。
yamada = {name:"山田",age:25,height:175}
p yamada
そうすると次のような結果が得られます。「:〇〇」の部分がキーで、「=>」以降がバリューです。
次はもう少しハッシュの数を増やして、実行結果を確認してみます。下記コードを貼り付けて実行してください。
yamada = {name:"山田",age:25,height:175}
tanaka = {name:"田中",age:28,height:165}
ishikawa = {name:"石川",age:38,height:185}
p yamada
p tanaka
p ishikawa
ハッシュの作成方法については以上です。ハッシュは必ずキーとバリューの2つが必要であると覚えておきましょう。
ハッシュから要素を取り出そう(基礎編)
この章ではハッシュから要素を取り出す方法について解説していきます。復習となりますが、配列では要素を取り出す際にインデックスを手がかりにしていました。
ハッシュから要素を取り出すには、キーを手がかりにします。次のコードを貼り付けて実行してみましょう。
yamada = {name:"山田",age:25,height:175}
puts yamada[:name]
puts yamada[:age]
puts yamada[:height]
実行結果は次のようになったのではないでしょうか。このようにハッシュ名[:キー]とすることで、キーに紐づくバリューを取り出せます。
それではハッシュの扱い方に慣れるために下記コードで様々なバリューを取り出してみましょう。下記コードを貼り付けて実行結果を確認してください。
yamada = {name:"山田",age:25,height:175}
tanaka = {name:"田中",age:28,height:165}
ishikawa = {name:"石川",age:38,height:185}
puts yamada[:name]
puts tanaka[:age]
puts ishikawa[:height]
#実行結果
# 山田
# 28
# 185
ここまででハッシュから要素を取り出す方法を理解できました。しかし、ハッシュの中身の要素が増えた場合、上記のように手動で行うと負担が大きいですね。
ハッシュから要素を取り出そう(応用編)
この章ではハッシュから要素を取り出す便利なメソッドを紹介します。まずは下記コードを貼り付けて実行結果を確認してください。
yamada = {name:"山田",age:25,height:175}
yamada.each_value do |info|
puts info
end
# 実行結果
# 山田
# 25
# 175
上記コードのようにeach_valueメソッドを使えば、ハッシュの中のバリューを全て取り出せます。
もう1つ別の例を見てみましょう。下記コードを貼り付けて実行結果を確認してください。
animals = {"猫":"にゃー","犬":"ワンワン","にわとり":"コケコッコー"}
animals.each do |animal,voice|
puts "#{animal}が#{voice}と鳴いた。"
end
eachメソッドを使い、animalとvoiceという2つの引数を持たせることでハッシュから要素を取り出せます。eachを使わずに書いた場合と比べると、非常にシンプルなコードになっていることが分かりますね。
# eachメソッドを使わない場合
animals = {"猫":"にゃー","犬":"ワンワン","にわとり":"コケコッコー"}
puts "猫が#{animals[:"猫"]}と鳴いた。"
puts "犬が#{animals[:"犬"]}と鳴いた。"
puts "にわとりが#{animals[:"にわとり"]}と鳴いた。"
このようにハッシュには要素を取り出す便利なメソッドが用意されています。
\Rubyでのサービス開発スキルが身に付く/
まとめ
ここまでRubyの配列とハッシュについて解説してきました。配列とハッシュの学習を始めた頃は理解しにくい概念ですが、使いこなせれば非常に便利なものです。
ぜひ皆さんも実際にコードを書いて、練習してみてはいかがでしょうか?
- この記事を書いた人
- ヤマモト