Ruby 按特定顺序将哈希值写入数组
我有一堆散列,看起来像这样Ruby 按特定顺序将哈希值写入数组,ruby,arrays,hash,Ruby,Arrays,Hash,我有一堆散列,看起来像这样 { "key1"=>"value1", "key2"=>"value2", "key4"=>"value4" } { "key1"=>"value1", "key3"=>"value3", "key4"=>"value4" } 正如您所看到的,并不是所有的哈希都有所有的键。在此基础上,我需要得到一个包含所有值的数组,并用字符串“notlisted”代替所有缺少的值 我开始编写如下代码: result = []
{
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
{
"key1"=>"value1",
"key3"=>"value3",
"key4"=>"value4"
}
正如您所看到的,并不是所有的哈希都有所有的键。在此基础上,我需要得到一个包含所有值的数组,并用字符串“notlisted”代替所有缺少的值
我开始编写如下代码:
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"]
不清楚您如何知道应该有多少个键,但假设您应该有4个键,您可以执行以下操作:
h = {
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
(1..4).map { |i| h["key#{i}"] || 'Not Listed' }
#=> ["value1", "value2", "Not Listed", "value4"]
奥雅纳建议使用fetch
:
(1..4).map { |i| h.fetch("key#{i}", 'Not Listed') }
#=> ["value1", "value2", "Not Listed", "value4"]
还有一个选项是使用Hash
的default
值:
h.default = 'Not Listed'
(1..4).map { |i| h["key#{i}"] }
#=> ["value1", "value2", "Not Listed", "value4"]
不清楚您如何知道应该有多少个键,但假设您应该有4个键,您可以执行以下操作:
h = {
"key1"=>"value1",
"key2"=>"value2",
"key4"=>"value4"
}
(1..4).map { |i| h["key#{i}"] || 'Not Listed' }
#=> ["value1", "value2", "Not Listed", "value4"]
奥雅纳建议使用fetch
:
(1..4).map { |i| h.fetch("key#{i}", 'Not Listed') }
#=> ["value1", "value2", "Not Listed", "value4"]
还有一个选项是使用Hash
的default
值:
h.default = 'Not Listed'
(1..4).map { |i| h["key#{i}"] }
#=> ["value1", "value2", "Not Listed", "value4"]
使用默认的“未列出”初始化哈希,然后迭代输入以填充存在的值
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)
抱歉,刚才复制了用户拥有的内容。使用默认的“未列出”初始化哈希,然后迭代输入以填充存在的值
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)
抱歉,刚才复制了用户拥有的内容。预期输出?告诉我…您在使用什么样的数据大小?几百?几千?数百万?每次我运行脚本时,数十万到一百万。预期输出?告诉我…您在使用什么样的数据大小?几百?几千?数百万?每次我运行脚本时数十万到一百万。Ruby way(我最喜欢)
(1..4)。map{I|h.fetch(“key{I},'Not Listed')}
我很沮丧,首先,现在我明白了,你使用了\fetch
+1.我很高兴,Ruby way(我最喜欢)(1..4).map{I | h.fetch(“key{I},'Not Listed')}
我很不高兴,首先,现在我明白了,你用了\fetch
+1.我很高兴,您是否尝试运行此代码?-它运行不正确。很抱歉,刚才复制了用户拥有的内容。是否尝试运行此代码?-它没有正确运行。很抱歉,只是复制了用户拥有的内容。