あるハッシュの全てのキーを要素とする配列を作成するには、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}>
例えば、あるハッシュのキーとして、a
、b
、c
、d
がすべて含まれているか調べたいとします。
このようなチェックは、それらの要素を含む 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
オブジェクトの演算に関してはこちらのページを参照してください。