【初心者向け】Rubyの配列とハッシュ〜応用編〜


【初心者向け】Rubyの配列とハッシュ〜応用編〜

「Rubyの配列に関して詳しく知りたい」
「eachやmapメソッドがいまいち分からない」

Rubyを学習している方の中には、このように感じている方もいらっしゃるのではないでしょうか。 配列やハッシュはRubyに限らず、Ruby on Railsでも頻繁に使用する重要な概念です。

また配列という概念はPythonやPHP、Javascriptなど幅広いプログラミング言語で使用される概念であるため、Rubyの配列やハッシュを理解しておくと、その他の言語の習得もスムーズになります。

そこで今回は配列とハッシュの応用編について分かりやすく解説していきます。Rubyの配列とハッシュの基礎から学びたい方は下記記事を参考にしてみてくださいね。

Rubyの配列とハッシュの基礎編

目次
  1. Rubyの実行環境を作ろう
  2. Rubyの2次元配列を作成しよう
  3. 1次元配列
  4. 2次元配列
  5. 下記コードを貼り付けてください
  6. 実行結果
  7. 下記コードを貼り付けてください
  8. 実行結果
  9. Rubyの2次元配列で要素を取り出してみよう
  10. 下記コードを貼り付けてください
  11. 実行結果
  12. members[0] => ["太郎", "次郎", "三郎"]
  13. members[0][0] => 太郎
  14. members[0][1] => 次郎
  15. members[0][2]] => 三郎
  16. members[1] => ["John", "Mary", "Mike"]
  17. members[0][0] => John
  18. members[0][1] => Mary
  19. members[0][2]] => Mike
  20. Rubyの2次元配列で要素の追加と削除をしてみよう
  21. 2次元配列の要素を入れ替えてみよう
  22. 元の配列
  23. 要素を入れ替える
  24. 実行結果
  25. 2次元配列に要素を追加してみよう
  26. 元の配列
  27. 要素を追加
  28. 2次元配列の要素を削除してみよう
  29. 元の配列
  30. 実行結果
  31. [["太郎", "次郎", "三郎"], ["John", "Mary", "Mike"]]
  32. 要素を削除
  33. 実行結果
  34. [["太郎", "三郎"], ["John", "Mary", "Mike"]]
  35. mapメソッドを使い配列から要素を取り出してみよう
  36. 実行結果
  37. [200, 400, 600, 800]
  38. 実行結果
  39. 100
  40. 200
  41. 300
  42. 400
  43. 2次元ハッシュ配列を理解しょう
  44. 実行結果
  45. [{:name=>"John", :height=>175, :age=>28}, {:name=>"Mary", :height=>165, :age=>22}, {:name=>"Tom", :height=>183, :age=>35}]
  46. 2次元ハッシュ配列から要素を取り出してみよう
  47. 実行結果
  48. [{:name=>"John", :height=>175, :age=>28}, {:name=>"Mary", :height=>165, :age=>22}, {:name=>"Tom", :height=>183, :age=>35}]
  49. 実行結果
  50. {:name=>"John", :height=>175, :age=>28}
  51. 実行結果
  52. "John"
  53. 実行結果
  54. [{:name=>"John", :height=>175, :age=>28}, {:name=>"Mary", :height=>165, :age=>22}, {:name=>"Tom", :height=>183, :age=>35}]
  55. 実行結果
  56. {:name=>"John", :height=>175, :age=>28}
  57. 実行結果
  58. まとめ

Rubyの実行環境を作ろう

配列やハッシュを使用する前にRubyの実行環境を作っていきましょう。

今回は環境構築をおこなわずにプログラムを実行できるreplitというサービスを使います。 replitは自分の書いたコードがどのように動くのかをすぐに確認したい時などにおすすめです。

まずは以下手順でreplitの実行環境を作成してください。

①ブラウザでreplitを開く

②検索窓で「Ruby」を検索

③「Create repl」ボタンをクリック

④下の実行画面が現れるのを確認

image

⑤ソースコード部分に下記コードを貼り付け実行する

print ”Hello Ruby”

以降で紹介するコードは全てソースコード部分に書いていきます。

image

Rubyの2次元配列を作成しよう

この章では実際にRubyを使って2次元配列を作成していきます。

2次元配列とは配列の中に配列が格納されたものです。1次元配列と2次元配列に関しては下記コードを参照ください。

#1次元配列
[1,2,3,4,5,6,7,8,9]

#2次元配列
[[1,2,3],[4,5,6],[7,8,9]]

Replitを開き、下記コードを貼り付け実行して結果を確認してみましょう。『newメソッド』で空の配列を作成可能です。

下記コードにあるArray.new(5,1)ですが、「5」は配列の中身の要素数、「1」は要素を表しています。今回は要素が1のものを5個格納した配列を作成しました。

#下記コードを貼り付けてください
numbers = Array.new(5,1)
p numbers

#実行結果
[1, 1, 1, 1, 1]

これで1次元配列を作成することができました。同じくnewメソッドを使って、2次元配列を作ってみましょう。

#下記コードを貼り付けてください
numbers2 = Array.new(3,Array.new(5,1))
p numbers2

#実行結果
[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]

1次元配列のコードと比較すると、少々複雑ですが行っていることは同じです。Array.new()の中に別のArray.new()を入れてあげると2次元配列を作成できます。

Rubyの2次元配列で要素を取り出してみよう

ここまで2次元配列の作成方法を学んできました。次に作成した配列から要素を取り出す方法について解説していきます。

まずは下記コードをReplitに貼り付けて実行結果を確認してみましょう。

#下記コードを貼り付けてください
members = [["太郎","次郎","三郎"],["John","Mary","Mike"]]
p members

#実行結果
[["太郎", "次郎", "三郎"], ["John", "Mary", "Mike"]]

名前が格納された2次元配列が完成しました。「太郎」という要素を取り出す場合、下記のように記述すればOKです。

members = [["太郎","次郎","三郎"],["John","Mary","Mike"]]
p members
puts members[0][0]

他の要素の取り出し方は下記コードを参照ください。2次元配列から要素を取り出す際は、下記ステップに従うことで可能になります。

3次元や4次元配列など配列の数が増えても、基本的に取り出し方は2次元配列と変わりません。

[2次元配列から要素を取り出す方法]

①取り出す配列を選択
②選択した配列から取り出したい要素のインデックスを指定

members = [["太郎","次郎","三郎"],["John","Mary","Mike"]]
p members
puts members[0][0]
puts members[0][1]
puts members[0][2]
puts members[1][0]
puts members[1][1]
puts members[1][2]

#members[0] => ["太郎", "次郎", "三郎"]
#members[0][0] => 太郎
#members[0][1] => 次郎
#members[0][2]] => 三郎

#members[1] => ["John", "Mary", "Mike"]
#members[0][0] => John
#members[0][1] => Mary
#members[0][2]] => Mike

Rubyの2次元配列で要素の追加と削除をしてみよう

次に2次元配列に対して要素の入れ替えや追加・削除する方法について見ていきましょう。引き続きReplitを使ってコードを実行していきます。

2次元配列の要素を入れ替えてみよう

まずは配列の中身を入れ替える方法について見ていきましょう。下記コードを貼り付けて、実行結果を確認してください。

members = [["太郎","次郎","三郎"],["John","Mary","Mike"]]
# 元の配列
p members

# 要素を入れ替える
members[0][0] = "四郎"
members[1][2] = "Amanda"
p members

#実行結果
[["太郎", "次郎", "三郎"], ["John", "Mary", "Mike"]]
[["四郎", "次郎", "三郎"], ["John", "Mary", "Amanda"]]

今回は「太郎」を「四郎」に、「Mike」を「Amanda」に入れ替えてみました。次のステップに従って実行すると、配列の要素の入れ替えが可能です。

[2次元配列の要素を入れ替える方法]
①入れ替えたい要素を格納している配列を選択
②入れ替えたい要素のインデックスを指定
③入れ替えた後の要素を定義

2次元配列に要素を追加してみよう

次に2次元配列に要素を追加してみましょう。Replitに下記コードを貼り付けて、実行結果を確認してください。

members = [["太郎","次郎","三郎"],["John","Mary","Mike"]]
# 元の配列
p members

# 要素を追加
members[0].push("五郎")
members[1].push("Tom")
p members

1番目と2番目の配列にそれぞれ「五郎」と「Tom」という要素を追加しました。要素の追加は『push』メソッドで可能になります。

[pushメソッドの使い方]
追加する配列.push(追加したい要素)

2次元配列の要素を削除してみよう

次は2次元配列から要素を削除してみましょう。まずは下記コードをReplitに貼り付けて、実行結果を確認してください。

members = [["太郎","次郎","三郎"],["John","Mary","Mike"]]
# 元の配列
p members

#実行結果
#[["太郎", "次郎", "三郎"], ["John", "Mary", "Mike"]]

# 要素を削除
members[0].delete_at(1)
p members

# 実行結果
# [["太郎", "三郎"], ["John", "Mary", "Mike"]]

「delete_at」メソッドを使用すれば、配列から要素を削除できます。delete_atの後にはインデックスの値を指定してください。

例えばある配列の中の1番目の要素を削除したければ、delete_at(0)と記述すればOKです。

mapメソッドを使い配列から要素を取り出してみよう

この章ではRubyに用意されている『map』メソッドに関して解説していきます。Ruby on Railsなどでも頻繁に使用する重要なメソッドです。

mapメソッドは、ある配列から要素を取り出し、その要素に処理を加えた後に再度配列に格納する働きがあります。まずは下記コードをReplitに貼り付けて、実行結果を確認してみましょう。

numbers = [100,200,300,400]
results = numbers.map do |number|
  number * 2
end
p results

#実行結果
#[200, 400, 600, 800]

mapメソッドを実行すると、実行結果が配列で返ってくるのが分かりました。eachメソッドもmapと似ていて、同様に配列から要素を取り出すためのものですが、配列として返ってきません。

numbers = [100,200,300,400]
numbers.each do |number|
  number * 2
  p number
end

# 実行結果
#100
#200
#300
#400

2次元ハッシュ配列を理解しょう

この章では配列の中に複数の『ハッシュ』が格納された2次元ハッシュ配列について解説していきます。2次元ハッシュ配列は、Ruby on Railsなどでも頻繁に目にする重要な概念です。

まずは下記コードをReplitに貼り付けて、実行結果を確認してみましょう。

User = [
  {name:"John",height:175,age:28},
  {name:"Mary",height:165,age:22},
  {name:"Tom",height:183,age:35}
]

p User

#実行結果
# [{:name=>"John", :height=>175, :age=>28}, {:name=>"Mary", :height=>165, :age=>22}, {:name=>"Tom", :height=>183, :age=>35}]

ハッシュを使う目的としては、上記コードにある「name」や「age」などの項目と値を紐づけることです。nameやheightなどは『キー』、Johnや175などは『バリュー』と呼ばれ、ハッシュを書く際は、必ずキーとバリューのセットになっているか確認しましょう。

2次元ハッシュ配列から要素を取り出してみよう

次に2次元ハッシュ配列から要素を取り出す方法について解説していきます。下記コードを貼り付けて実行結果を確認してみましょう。


User = [
  {name:"John",height:175,age:28},
  {name:"Mary",height:165,age:22},
  {name:"Tom",height:183,age:35}
]

p User
# 実行結果
# [{:name=>"John", :height=>175, :age=>28}, {:name=>"Mary", :height=>165, :age=>22}, {:name=>"Tom", :height=>183, :age=>35}]

p User[0]
# 実行結果
# {:name=>"John", :height=>175, :age=>28}

p User[0][:name]
# 実行結果
# "John"

2次元ハッシュ配列から要素を取り出すには、まず配列のインデックスを選択した後に、「キー」を指定する必要があります。

また2次元ハッシュ配列では、ある要素を入れ替えることも可能です。下記コードを貼り付けて実行してみましょう。

User = [
  {name:"John",height:175,age:28},
  {name:"Mary",height:165,age:22},
  {name:"Tom",height:183,age:35}
]

p User
# 実行結果
# [{:name=>"John", :height=>175, :age=>28}, {:name=>"Mary", :height=>165, :age=>22}, {:name=>"Tom", :height=>183, :age=>35}]

p User[0]
# 実行結果
# {:name=>"John", :height=>175, :age=>28}

User[0][:name] = "Mike"
p User[0]

#実行結果
{:name=>"Mike", :height=>175, :age=>28}

nameの値が「John」であったところが「Mike」に変わっているのが分かります。このように2次元ハッシュ配列でも、2次元配列同様に要素の操作が可能です。

Rubyでのサービス開発スキルが身に付く

無料カウンセリングはこちら

まとめ

ここまでRubyの2次元配列や2次元ハッシュ配列について解説してきました。最初のうちは配列やハッシュは見慣れず、難しく感じるかと思います。

Ruby on Railsなどフレームワークを扱う際にも頻繁に使用する重要な概念ですので、しっかり理解しておきましょう!


関連記事

ヤマモト
この記事を書いた人
ヤマモト
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp