LoginSignup
2
3

More than 5 years have passed since last update.

これだけは覚えておきたい!Rubyにおけるハッシュの使い方

Posted at

導入

皆様、プログラミングの方は順調でしょうか。
私は今あるエンジニア育成キャンプの見習いメンターを務めるものです。
今回、受講生から受けた質問の中で、特出して多かった内容があります。
それは...

ハッシュってなんやねん!!!

ということです。配列っていう概念は耳にしたことはあっても、ハッシュに慣れている方はいらっしゃらないみたいですね。今回は、問題を解きながら、実際にハッシュの使い方を学んでいきます。

問題

テストの得点と、それに対応する生徒の名前を入力していきすべて入力し終わった段階で、テストの得点の高い方から順番に上から表示し、最後に平均得点を表示するプログラムを作ってください。

まずはここまではみなさん書くことができます。

def input_score
  puts "生徒の名前を入力してください"
  name = gets.chomp
  puts "得点を入力してください"
  score = gets.chomp
end

def show_all_score
end

while true do
  puts "得点を入力しますか?:[0]yes [1]no"
  input = gets.to_i

  if input == 0
    input_score
  else
    show_all_score
    exit
  end
end

しかし、input_scoreメソッドを見てください。
このままでは入力する生徒の数に応じて変数名を指定しておかなくてはならず、非効率です。そこでデータをまとめておこうということになり、ハッシュを使うことになります。
ではそもそもハッシュとはなんなのでしょうか?

ハッシュとは、データの保管庫である!

どんな要素でもぶち込める配列に対して、ハッシュはキーに応じてデータをまとめることができます。今回の場合ですと、ハッシュというまとめに対して、そのまとめておきたい要素は
①生徒の名前
②点数
となります。

このように、まとめ全体のことがハッシュというものであり、
そこに属するまとめたい要素がキーとなるのです!!!

つまり今回の場合ですとこうなります。

def input_score
  score = {}
  puts "生徒の名前を入力してください"
  score[:name] = gets.chomp
  puts "得点を入力してください"
  score[:score] = gets.chomp
end

def show_all_score
end

while true do
  puts "得点を入力しますか?:[0]yes [1]no"
  input = gets.to_i

  if input == 0
    input_score
  else
    show_all_score
    exit
  end
end

二行目を見てください。
score = {} と書いてあります

このように

ハッシュ名 = {}

とすることで、ハッシュを作ることができます。
そして四行目以降では

score[:name] = gets.chomp
name[:score] = ~
と書いてあります。
このように

ハッシュ名[:キー] = 入れたいもの 

とすることで入れたいものをキーとセットにしてハッシュに入れることができます。
これで重要な操作は終りとなります。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3