Ruby on rails 在哈希上使用每个时出错

Ruby on rails 在哈希上使用每个时出错,ruby-on-rails,ruby,Ruby On Rails,Ruby,在Rails中,我尝试使用散列。当我对它执行每个时,我会得到一个意外的结果。我正在尝试访问每个元素的“名称” 我从一个名为some_files的散列开始,这次只包含一个元素: logger.debug some_files # Outputs this: {"0"=>{"name"=>"index.html", "contents"=>""}} # Ok cool, the first level of this array seems to only have 1 el

在Rails中,我尝试使用散列。当我对它执行
每个
时,我会得到一个意外的结果。我正在尝试访问每个元素的“名称”

我从一个名为
some_files
的散列开始,这次只包含一个元素:

logger.debug some_files  
# Outputs this:  {"0"=>{"name"=>"index.html", "contents"=>""}}
# Ok cool, the first level of this array seems to only have 1 element called "0".
现在我想遍历它(因为有时它会有多个元素)

第一个输出:

{"0"=>{"name"=>"index.html", "contents"=>""}}
是散列,而不是数组。第二个输出是一个数组

some_files.each do |some_file|
   # you get
   a = ["0", {"name"=>"index.html", "contents"=>""}]
   # which is an array, containing a string and a hash and you could get the name via:
   name = a[1]["name"]
end
由于数组没有方法名,因此会得到未定义的方法名

至于

奇怪,为什么我仍然得到“0”?为什么它看起来是一个独立的元素

我不明白你的意思。

第一个输出:

{"0"=>{"name"=>"index.html", "contents"=>""}}
是散列,而不是数组。第二个输出是一个数组

some_files.each do |some_file|
   # you get
   a = ["0", {"name"=>"index.html", "contents"=>""}]
   # which is an array, containing a string and a hash and you could get the name via:
   name = a[1]["name"]
end
由于数组没有方法名,因此会得到未定义的方法名

至于

奇怪,为什么我仍然得到“0”?为什么它看起来是一个独立的元素


我不明白你的意思。

如果在Ruby中使用.each对哈希进行迭代,则会向块传递一个键和一个值。如果只指定1个参数,则这将是一个包含键和值的数组。因此,正确使用应为:

hash = {"0"=>{"name"=>"index.html", "contents"=>""}}

hash.each do |key, value|
  puts "key = #{key}, value = #{value}"
  # => key = 0, value = {"name"=>"index.html", "contents"=>""}      
end

由于
value
也是一个散列,因此可以用同样的方法对其进行迭代。

如果使用.Ruby中的每一个对散列进行迭代,则键和值都会传递给块。如果只指定1个参数,则这将是一个包含键和值的数组。因此,正确使用应为:

hash = {"0"=>{"name"=>"index.html", "contents"=>""}}

hash.each do |key, value|
  puts "key = #{key}, value = #{value}"
  # => key = 0, value = {"name"=>"index.html", "contents"=>""}      
end

由于
value
也是一个散列,因此您可以用同样的方法对其进行迭代。

如果您进行了向下投票,请至少给出您为什么要进行向下投票的评论。我看了文档,没有看到我的错误。它不应该是某个文件。last[“name”]
?如果不使用
每个
,您如何迭代
一些文件?我指的是
一些|文件| |一些|文件|……
如果你发帖,请至少给出一个关于你所问问题的问题。我看了这篇文章,没有发现任何问题。如果你投了反对票,请至少对你为什么投反对票发表评论。我看了文档,没有看到我的错误。它不应该是某个文件。last[“name”]
?如果不使用
每个
,您如何迭代
一些文件?我指的是
一些|文件| |一些|文件|……
如果你发帖,请至少给出一个关于你所问问题的问题。我已经看了这篇文章,没有看到任何问题。谢谢sytycs在问题中将“array”改为“hash”。为什么每个
都将
0
和第二部分分开?每个文件不是都要经过第一级散列吗?@DonnyP some_files是一个嵌套的散列。通常传递两个块变量
。如果只传递一个,那么Ruby必须以某种方式进行弥补,因此它将所有内容放入由该块变量表示的数组中。这要感谢sytycs在问题中对“数组”进行了“哈希”更正。为什么每个
都将
0
和第二部分分开?每个文件不是都要经过第一级散列吗?@DonnyP some_files是一个嵌套的散列。通常传递两个块变量
。如果您只传递了一个,那么Ruby必须以某种方式进行补偿,以便将所有内容放入由该块变量表示的数组中