Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. ハッシュ.keys / values / has_key? / has_value?

ハッシュ.keys / values / has_key? / has_value?

ハッシュのキーや値の一覧を取得したり、特定のキー・値が存在するか確認するメソッドです。データの検査やデバッグで頻繁に使われます。

構文
# キーの一覧を配列で返します。
ハッシュ.keys

# 値の一覧を配列で返します。
ハッシュ.values

# キーが存在するか確認します(同義メソッド複数あり)。
ハッシュ.has_key?(キー)
ハッシュ.key?(キー)
ハッシュ.include?(キー)
ハッシュ.member?(キー)

# 値が存在するか確認します。
ハッシュ.has_value?(値)
ハッシュ.value?(値)

# 指定したキーに対応する値の配列を返します。
ハッシュ.values_at(キー1, キー2, ...)
メソッド一覧
メソッド概要
keysハッシュのすべてのキーを配列で返します。挿入順が保持されます。
valuesハッシュのすべての値を配列で返します。挿入順が保持されます。
has_key?(key)指定したキーが存在する場合に『true』を返します。『key?』『include?』『member?』も同義です。
has_value?(val)指定した値が存在する場合に『true』を返します。『value?』も同義です。
values_at(k1, k2, ...)指定した複数のキーに対応する値を配列で返します。存在しないキーは『nil』になります。
key(value)指定した値を持つ最初のキーを返します。存在しない場合は『nil』を返します。
size / lengthハッシュのキーと値のペアの数を返します。
empty?ハッシュが空の場合に『true』を返します。
サンプルコード
person = { name: '太郎', age: 30, city: '東京' }

# キーと値の一覧
puts person.keys.inspect    # [:name, :age, :city]
puts person.values.inspect  # ["太郎", 30, "東京"]

# キーの存在確認
puts person.has_key?(:name)    # true
puts person.key?(:email)       # false(存在しない)
puts person.include?(:age)     # true(has_key? と同義)

# 値の存在確認
puts person.has_value?('太郎') # true
puts person.value?(99)         # false

# 複数キーの値を一括取得
puts person.values_at(:name, :city).inspect   # ["太郎", "東京"]
puts person.values_at(:name, :email).inspect  # ["太郎", nil](存在しないキーはnil)

# 値からキーを逆引き
puts person.key('太郎')   # name
puts person.key('存在しない値')  # nil

# サイズと空チェック
puts person.size    # 3
puts person.empty?  # false
puts {}.empty?      # true

# keys を使ったハッシュの比較
config1 = { host: 'localhost', port: 3000 }
config2 = { host: 'example.com', port: 80, ssl: true }
common_keys = config1.keys & config2.keys
puts common_keys.inspect  # [:host, :port](共通するキー)
概要

Ruby 1.9以降のハッシュは挿入順が保証されるため、『keys』や『values』で取得した配列の順序は要素を追加した順番と一致します。

『has_key?』には『key?』『include?』『member?』という4つの同義メソッドがあります。どれを使っても機能は同じですが、Rubyスタイルガイドでは短い『key?』が推奨されることが多いです。チームの慣習に合わせて統一するのがベストプラクティスです。

『values_at』は複数のキーを一度に取得したいときに便利です。存在しないキーには『nil』が入るため、安全に利用するには事前に『has_key?』で確認するか、fetch でデフォルト値を指定しましょう。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。