Ruby on rails 在哈希上使用每个时出错
在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
每个时,我会得到一个意外的结果。我正在尝试访问每个元素的“名称”
我从一个名为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必须以某种方式进行补偿,以便将所有内容放入由该块变量表示的数组中