所以我有一堆看起来像这样的哈希
{
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
{
"key1"=>"value1",
"key3"=>"value3",
"key4"=>"value4"
}
Run Code Online (Sandbox Code Playgroud)
如您所见,并非所有哈希都具有所有键.除此之外,我需要获得一个包含所有值的数组,并使用字符串"Not listed"代替所有缺失值.
我开始写这样的代码:
result = []
i = 0
hash.each do |key, value|
i+=1
result << value if key == "key" + i.to_s
end
Run Code Online (Sandbox Code Playgroud)
在我意识到这个策略不起作用之前.有什么建议?
编辑:
第一个哈希的预期输出将是
["value1", "value2", "Not Listed", "value4"]
Run Code Online (Sandbox Code Playgroud)
而对于第二个哈希将是
["value1", "Not Listed", "value3", "value4"]
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚你怎么知道应该有多少键,但假设你应该有4个键,你可以做到以下几点:
h = {
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
(1..4).map { |i| h["key#{i}"] || 'Not Listed' }
#=> ["value1", "value2", "Not Listed", "value4"]
Run Code Online (Sandbox Code Playgroud)
Arup提出了不同的风味,使用fetch:
(1..4).map { |i| h.fetch("key#{i}", 'Not Listed') }
#=> ["value1", "value2", "Not Listed", "value4"]
Run Code Online (Sandbox Code Playgroud)
还有另一种选择是使用Hash的default值:
h.default = 'Not Listed'
(1..4).map { |i| h["key#{i}"] }
#=> ["value1", "value2", "Not Listed", "value4"]
Run Code Online (Sandbox Code Playgroud)