以特定顺序将哈希值写入数组

时间:2014-07-09 17:36:03

标签: ruby arrays hash

所以我有一堆看起来像这样的哈希

{
 "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"]

2 个答案:

答案 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)

抱歉,只是复制了用户的内容。