Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 按特定顺序将哈希值写入数组_Ruby_Arrays_Hash - Fatal编程技术网

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.我很高兴,您是否尝试运行此代码?-它运行不正确。很抱歉,刚才复制了用户拥有的内容。是否尝试运行此代码?-它没有正确运行。很抱歉,只是复制了用户拥有的内容。