Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 on rails 从数组中提取的哈希列表中的哈希_Ruby On Rails_Ruby_Ruby On Rails 4_Hash - Fatal编程技术网

Ruby on rails 从数组中提取的哈希列表中的哈希

Ruby on rails 从数组中提取的哈希列表中的哈希,ruby-on-rails,ruby,ruby-on-rails-4,hash,Ruby On Rails,Ruby,Ruby On Rails 4,Hash,我有一个简单的数组 arr = ["Japan", "Egypt", "Spain", "Brazil",....] 我想提取每个元素并使其成为散列 japan = Hash.new("Japan") egypt = Hash.new("Egypt") brazil = Hash.new("Brazil") 最后,将所有散列存储在groupping散列中 country = {"Japan" => 0, "Egypt" => 0,"Brazil" => 0,.....}

我有一个简单的数组

arr = ["Japan", "Egypt", "Spain", "Brazil",....]
我想提取每个元素并使其成为散列

japan = Hash.new("Japan")

egypt = Hash.new("Egypt")

brazil = Hash.new("Brazil")
最后,将所有散列存储在groupping散列中

country = {"Japan" => 0, "Egypt" => 0,"Brazil" => 0,.....}
试试这个

country = {}
arr.each do |name|
  country[name] = 0
end

我不确定您到底想做什么,但您可以尝试以下方法:

arr = ["Japan", "Egypt", "Spain", "Brazil"]
arr.each { |a| Object.const_set(a, Hash.new(a)) } #initialize hashes


注意:Ruby变量应该是小写的,如japan和egypt,常量应该是大写的,如japan和egypt。

要获得指定为请求输出的结果:

countries = ["Japan", "Egypt", "Spain", "Brazil"]
countries_hash = countries.zip([0] * countries.size).to_h
#⇒ {"Japan"=>0, "Egypt"=>0, "Spain"=>0, "Brazil"=>0}
我认为减少会有帮助:

arr = ["Japan", "Egypt", "Spain", "Brazil",....]
arr.reduce({}) do |hash, element|
  hash[element] = 0
  hash
end
最明显的是:

countries.map { |country| [country, 0] }.to_h

你能举一个例子说明你一开始有什么,你想达到什么目标吗?这是一个例子,我在开始时只有arr,最后我有Country你想把每个元素转换成一个单独的散列还是想创建一个包含所有元素的散列?我想创建一个包含所有元素的散列如果初始数组是arr=[Japan,Egypt,Japan],预期的输出是什么?Country=arr.each_with_object{}{{姓名,备忘录{备忘录[姓名]=0}。您的代码重新定义了一个常量,这会导致MRI警告,通常不受欢迎。@mudasobwa它不会重新定义常量。@Stefan哦,的确,我的错:您不应该使用Country作为变量的名称。请改用Country。常量以大写字母开头。此外,还有更好、更惯用的方法来完成您的任务例如simply doing country=Hash.new0,然后继续使用country。感谢您的回答,问题是最后我希望将country作为哈希,并包含哈希列表而不是简单元素,因此japon是哈希,egypt是哈希,所有这些都存储在Country@BriniH你能把你期望的哈希值贴出来吗?我不确定它是不是最多的很明显,因为您的代码或OP中没有定义国家,所以您的示例不起作用。@theTinMan,的确如此。事实上,很明显,每个有问题背景的人都可以看到它是明显的,即使它不直接起作用。您再明显不过了!请注意使用。它类似于reduce/inject,但不起作用不需要在块的末端返回容器,因此它更干净一些。
arr = ["Japan", "Egypt", "Spain", "Brazil",....]
arr.reduce({}) do |hash, element|
  hash[element] = 0
  hash
end
countries.map { |country| [country, 0] }.to_h