帮我写一个最简洁的方法,它接受一个参数(单级哈希)并返回一个值设置为 nil 的副本。
示例输入哈希
{
email: 'hans@moleman.com',
first_name: 'Hans',
last_name: 'Moleman'
}
返回值
{
email: nil,
first_name: nil,
last_name: nil
}
帮我写一个最简洁的方法,它接受一个参数(单级哈希)并返回一个值设置为 nil 的副本。
{
email: 'hans@moleman.com',
first_name: 'Hans',
last_name: 'Moleman'
}
{
email: nil,
first_name: nil,
last_name: nil
}
那这个呢?
new_hash = Hash[original_hash.keys.zip([])]
获取散列的键,用一个空数组压缩以获取具有 nil 的键对,并使用Hash[]
将其转换回散列。
或者,正如@mu_is_too_short 在评论中指出的那样,另一种可能不那么难以阅读的方法是:
new_hash = Hash[original_hash.keys.map { |k| [k, nil] }]
这是一个很好的选择,感谢@mu。
h= {
email: 'hans@moleman.com',
first_name: 'Hans',
last_name: 'Moleman'
}
Hash[*h.flat_map{|k,_| [k,nil]}]
#=> {:email=>nil, :first_name=>nil, :last_name=>nil}
或者干脆
Hash[h.map { |k,_| [k,nil] }]
#=> {:email=>nil, :first_name=>nil, :last_name=>nil}
在其评论补充之前的问题的答案
h = {
email: 'hans@moleman.com',
first_name: 'Hans',
last_name: 'Moleman'
}
h.keys.each{|k| h[k] = nil}
但不要忘记,还有一种更直接的方法可以清除哈希:
h.clear
h # => {}
问题的答案附有评论
original = {
email: 'hans@moleman.com',
first_name: 'Hans',
last_name: 'Moleman'
}
h = {}
original.keys.each{|k| h[k] = nil}
h # The hash you want
我能想出的最佳解决方案:
def clear_values(single_level_hash)
single_level_hash
.keys
.reduce({}) do |hash, key|
hash[key] = nil
hash
end
end
肯定有更好的办法!