在Ruby中检测重复键的习惯方法?

And*_*imm 5 ruby hash

我刚刚注意到,如果您向哈希提供重复的密钥,Ruby不会引发异常甚至提供警告:

$VERBOSE = true
key_value_pairs_with_duplicates = [[1,"a"], [1, "b"]]
# No warning produced
Hash[key_value_pairs_with_duplicates] # => {1=>"b"}
# Also no warning
hash_created_by_literal_with_duplicate_keys = {1 => "a", 1=> "b"} # => {1=>"b"}
Run Code Online (Sandbox Code Playgroud)

因为key_value_pairs_with_duplicates,我可以通过执行来检测重复键

keys = key_value_pairs_with_duplicates.map(&:first)
raise "Duplicate keys" unless keys.uniq == keys
Run Code Online (Sandbox Code Playgroud)

或者通过做

procedurally_produced_hash = {}
key_value_pairs_with_duplicates.each do |key, value|
  raise "Duplicate key" if procedurally_produced_hash.has_key?(key)
  procedurally_produced_hash[key] = value
end
Run Code Online (Sandbox Code Playgroud)

要么

hash = Hash[key_value_pairs_with_duplicates]
raise "Duplicate keys" unless hash.length == key_value_pairs_with_duplicates.length
Run Code Online (Sandbox Code Playgroud)

但这是否有惯用的方法呢?