0
0

More than 1 year has passed since last update.

【Ruby】 ハッシュ、シンボルの基礎

Posted at

概要

  • ハッシュ、シンボルについて復習をしたので、自分の中で整理しておくことにした
  • 学習したことの備忘録

主な内容

  • ハッシュ
  • シンボル
  • keysメソッド、valuesメソッド
  • ハッシュのキーワード引数

ハッシュ

{}は、Hashクラスのオブジェクト
a = {}
puts a.class => Hash

まずは基礎の基礎

ハッシュの要素を追加する場合
要素の追加
# ハッシュ[キー] = バリュー

colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }
colors["remon"] = "yellow"

puts colors => {"apple"=>"red", "orange"=>"orange", "melon"=>"green", "remon"=>"yellow"}
バリューを取り出したい場合
バリューの取り出し
# ハッシュ[キー]

colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }

puts colors["apple"] => red 
ハッシュをeach文で繰り返す場合
ハッシュの繰り返し
colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }

colors.each do |key, value|
  puts "#{key}の色は#{value}です。"
end

=> appleの色はredです。
=> orangeの色はorangeです。
=> melonの色はgreenです。

# ブロックパラメータが1つならバリューが配列になる

colors.each do |color|
  key = color[0]
  value = color[1]
  puts "#{key}の色は#{value}です。"
end

=> appleの色はredです。
=> orangeの色はorangeです。
=> melonの色はgreenです。

シンボル

シンボルは整数として管理されるため、文字列よりも高速に処理できる。

a = :apple
b = "apple"

puts a.class => Symbol
puts b.class => String

ポイント
シンボルは破壊的変更不可。

a = :apple
b = "apple"

puts a.upcase! #=> undefined method `upcase!' for :apple:Symbol (NoMethodError)
puts b.upcase! => APPLE

# upcaseなら
puts a.upcase => APPLE
以下、ハッシュをシンボルで書き換える
シンボルによる書き換え
colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }

# キーをシンボルにする
colors = { :apple => "red", :orange => "orange", :melon => "green" }

# => を書き換える
colors = { apple: "red", orange: "orange", melon: "green" }

# バリューもシンボルにする
colors = { apple: :red, orange: :orange, melon: :green }

keysメソッド、valuesメソッド

colors = { apple: :red, orange: :orange, melon: :green }
# キーを取り出す
puts colors.keys
=> apple orange melon

# バリューを取り出す
puts colors.values
=> red orange green

# キーがあるかどうか確認する
puts colors.has_key?(:apple)
=> true

キーワード引数

キーワード引数とはRuby2.0で導入された機能で、引数の意味を分かりやすく記述することができる機能。引数の可読性を高める。

デフォルト値を設定しない場合
キーワード引数
def person(last_name:, first_name:, favorite_food:)
  puts "私の名前は#{last_name} #{first_name}で、好きな食べ物は#{favorite_food}です。"
end

puts person(last_name: "山田", first_name: "花子", favorite_food: "寿司") => 私の名前は山田 花子で、好きな食べ物は寿司です。

# 順序を変えても正常に動作する
puts person(favorite_food: "寿司", first_name: "花子", last_name: "山田") => 私の名前は山田 花子で、好きな食べ物は寿司です。
デフォルト値の設定をする場合
キーワード引数(デフォルト値設定)
def person(last_name: "山田", first_name: '太郎', favorite_food: "ラーメン")
  puts "私の名前は#{last_name} #{first_name}で、好きな食べ物は#{favorite_food}です。"
end

puts person() => 私の名前は山田 太郎で、好きな食べ物はラーメンです。

最後に

  • 何となくの理解は脱却できた
  • 言語化してアウトプットを続けることで、理解を定着させたい

⚠️学習4ヶ月目の初学者による投稿です。
⚠️間違いがあるかもしれません。ご容赦ください。
⚠️ご指導、ご教授いただけると幸いです。

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