まくまくRubyノート
ハッシュのキー、値の配列を取得する (keys, values)
2019-01-12

基本

ハッシュのキーの配列

あるハッシュの全てのキーを要素とする配列を作成するには、Hash#keys メソッドを使用します。

h = {'a' => 100, 'b' => 200, 'c' => 300}
p h.keys  #=> ["a", "b", "c"]

ハッシュの値のリスト

同様に、あるハッシュの全ての値を要素とする配列を作成するには、Hash#values メソッドを使用します。

h = {'a' => 100, 'b' => 200, 'c' => 300}
p h.values  #=> [100, 200, 200]

応用

セットとして作成する

ハッシュのキーや値を、配列ではなく Set オブジェクトとして取得したければ、Set.new コンストラクタに渡してやれば OK です。

require 'set'

h = {'a' => 100, 'b' => 200, 'c' => 300}
key_set = Set.new(h.keys)  #=> #<Set: {"a", "b", "c"}>
value_set = Set.new(h.values)  #=> #<Set: {100, 200, 300}>

ハッシュに期待するキーが全て含まれているか調べる

例えば、あるハッシュのキーとして、abcd がすべて含まれているか調べたいとします。 このようなチェックは、それらの要素を含む Set オブジェクトから、Hash#keys で求められる配列を - 演算子で引いてやることで行うことができます。 引いた結果が空にならないということは、必要なキーが足りていないということです。

require 'set'

REQUIRED_KEYS = Set['a', 'b', 'c', 'd']
h = {'b' => 200, 'd' => 400}
missing = REQUIRED_KEYS - h.keys

for k in missing
  puts "キー #{k} が足りません"
end

実行結果

キー a が足りません
キー c が足りません

Set オブジェクトの演算に関してはこちらのページを参照してください。

2019-01-12