2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】ハッシュについて改めて振り返ってみる

Last updated at Posted at 2024-07-21

こんにちは。あがさんです!!
アプレンティスへの参加を機に定期的に記事を投稿していきます。
どうぞよろしくお願いいたします。
ただの感想文になるかも...

Rubyを学習していて

Rubyを学習をしていく中で、理解しているつもりでも全然理解していなかったところを記事にして再確認していきます。今回はハッシュについてです。
データの受け渡しに関わるコードを書いているとぶち当たる内容ですよね〜。

このあと簡単なコードで仕組みや振る舞いを再確認していきたいと思います!!

ハッシュってなに?

ハッシュはキー(key)と値(value)の組み合わせでデータを管理するオブジェクトのことです

ruby sample.rb
ash_sample = {}
hash_sample = {"key_a" => 1, "key_b" => 2, "key_c" => 3}

p hash_sample # => {"key_a"=>1, "key_b"=>2, "key_c"=>3}
p hash_sample.class # => Hash         ・・・ Hashというクラスになっている
p hash_sample.length # => 3

興味深いのがp hash_sample.lengthの結果が3であることからキーと値が一対であることがわかります。

あれこれ確認してみる

 番号と文字列のペアを配列のみで管理する場合は、配列の中に配列を作る連想配列が手段の一つに挙げられます。学習初期の私は外側の配列のインデックスを指定して、内側の配列のインデックスを指定するという味気ない方法しか知りませんでした。
 

ruby sample.rb
gw_array = [[1, "Heero"],[2, "Duo"],[3, "Trowa"],[4, "Quatre"],[5," Wufei"]]

p gw_array[0][0] # => 1
p gw_array[3][1] # => "Quatre"

上記の記述をhashの形式に書き換えるとこうなります!↓

ruby sample.rb
gw_hash = { 1 => "Heero", 2 => "Duo", 3 => "Trowa", 4 => "Quatre", 5 => "Wufei"}
p gw_hash.keys #=> [1, 2, 3, 4, 5]
p gw_hash[1] #=> "Heero" ← キーに対応した値が出力
p gw_hash["Duo"] #=> nil ← 逆に値からキーを出力できないようです。。。
p gw_hash.values #=> ["Heero", "Duo", "Trowa", "Quatre", "Wufei"]

なんだかワンランク上のコードに見えて良き!

ハッシュのキーや値を出力する方法はいくつかあります。
※キーと値は一対となっていますが値からキーを出力できないようです。

ruby sample.rb
gw_hash = { 1 => "Heero", 2 => "Duo", 3 => "Trowa", 4 => "Quatre", 5 => "Wufei"}

gw_hash_a = {2 => "Duo", 3 => "Trowa", 4 => "Quatre", 5 => "Wufei", 1 => "Heero",}
gw_hash_b = { 1 => "Duo", 2 => "Heero", 3 => "Trowa", 4 => "Quatre", 5 => "Wufei"}

p gw_hash == gw_hash_a  #=>ture
p gw_hash == gw_hash_b  #=>false

続いて要素の並び替えをしてみました。gw_hash_aはキーと値はそのままに1 => "Heero"を最後に配置しました。その後、元のgw_hashと比較してみました。返り値はtrueとなるようです。
ただ、キーと値の組み合わせを変えたgw_hash_bは流石にfalseとなるようですね..。

ruby sample.rb
gw_hash = { 1 => "Heero", 2 => "Duo", 3 => "Trowa", 4 => "Quatre", 5 => "Wufei"}


gw_hash[6] = "Zechs"
p gw_hash #=>{1=>"Heero", 2=>"Duo", 3=>"Trowa", 4=>"Quatre", 5=>"Wufei", 6=>"Zechs"}

gw_hash[2] = "Duo Maxwell" #値の変更
p gw_hash.delete(1)  #=> "Heero" を削除

p gw_hash #=> {2=>"Duo Maxwell", 3=>"Trowa", 4=>"Quatre", 5=>"Wufei", 6=>"Zechs"}

追加、編集、削除もこのように行うことができました。何回かコードを書いているとまた新たな発見があるかもしれません。他にも様々な記述方法があるようですが今回は割愛します!!

よく使いそうな処理

実際に便利だなと感じた処理を書いていきます。

ruby sample.rb
gw_hash = { 1 => "Heero", 2 => "Duo", 3 => "Trowa", 4 => "Quatre", 5 => "Wufei"}
#eachメソッドで繰り返し処理
gw_hash.each do |key, value|
  puts "#{key}: #{value}"
end
--------------
#出力結果
#1: Heero
#2: Duo
#3: Trowa
#4: Quatre
#5: Wufei

keyと値をセットにして出力できます。この処理は実際にコードを書いていく中ですごくお世話になりました。

まとめ

いかがでしたでしょうか。取り急ぎ書き綴った記事になりましたが、ハッシュについて自分が本当に最初の段階で覚えた内容から今回投稿してみようと思いました。他にはシンボルや配列に変換するなどいろんなことができるテーマだと感じました。頭がパンクしそうなので今回はこの辺にしておきたいと思います。それでは次回もお楽しみ〜!

~Qiitaの歴史がまた1ページ~

参考文献
・プロを目指す人のためのRuby入門(伊藤淳一 著)

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?