我刚刚注意到,如果您向哈希提供重复的密钥,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)
但这是否有惯用的方法呢?
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |