所以我有一堆看起来像这样的哈希
{
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
{
"key1"=>"value1",
"key3"=>"value3",
"key4"=>"value4"
}
如您所见,并非所有哈希都具有所有键。除此之外,我需要得到一个包含所有值的数组,以及字符串"未列出"代替所有缺失的值。
我开始写这样的代码:
result = []
i = 0
hash.each do |key, value|
i+=1
result << value if key == "key" + i.to_s
end
在我意识到这个策略不起作用之前。有什么建议吗?
编辑:
第一个哈希的预期输出为
["value1", "value2", "Not Listed", "value4"]
,第二个哈希将是
["value1", "Not Listed", "value3", "value4"]
答案 0 :(得分:6)
目前尚不清楚您如何知道应该有多少键,但假设您应该有4个键,则可以执行以下操作:
h = {
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
(1..4).map { |i| h["key#{i}"] || 'Not Listed' }
#=> ["value1", "value2", "Not Listed", "value4"]
Arup使用fetch
建议了不同的风格:
(1..4).map { |i| h.fetch("key#{i}", 'Not Listed') }
#=> ["value1", "value2", "Not Listed", "value4"]
还有一个选择是使用Hash
的{{1}}值:
default
答案 1 :(得分:0)
使用默认&#34;未列出&#34;初始化哈希值然后迭代输入以填充存在的值。
def solution(keys,default_val)
Hash[keys.product([default_val])]
end
result = solution(["key1","key2", "key3", "key4"],"not listed")
hash.each do |key, value|
result[key] = value
end
print(result)
抱歉,只是复制了用户的内容。