仅在存在时修改Ruby哈希中的值

时间:2015-01-09 14:59:47

标签: ruby hash coding-style

我需要修改特定键的哈希值,但如果不存在则我不想添加键,长版本将是:

if my_hash.has_key?( :key )
    my_hash[ :key ] = true if my_hash[ :key ] == 0
    my_hash[ :key ] = false if my_hash[ :key ] == 1
    # leave value alone if it is not 0 or 1
else
    # leave hash alone if key is not present
end

我想知道是否会有更优雅的解决方案。

3 个答案:

答案 0 :(得分:6)

可能使用case声明

case my_hash[:key]                                                                                                                                                                   
when 0; my_hash[:key] = true                                                                                                                                                         
when 1; my_hash[:key] = false                                                                                                                                                        
end

答案 1 :(得分:2)

出于好奇:)

[0,1].include?(my_hash[:key]) && my_hash[:key] = my_hash[:key].zero? 

答案 2 :(得分:0)

一种方法可能是使用"映射"的散列。值,然后迭代您的普通哈希值并设置值

value_map = { 0 => true, 1 => false }
my_hash.each { |k, v| my_hash[k] = value_map.include?(v) ? value_map[v] : v }