【问题标题】:iterate through a multi dimensional hash遍历多维哈希
【发布时间】:2012-08-14 06:21:11
【问题描述】:

我之前发布了一个问题,但我并不清楚我的意图。所以在这里我会再试一次。

我遇到的问题是我需要分别提取亚马逊和厨师的价值。现在它们在我的迭代中都保存在 b 值中。我试图在 value.each 中创建另一个循环,但出现错误。如何有效地分别有效地提取价值?

任何帮助将不胜感激。

我通过这种方式从 yaml 文件中获取哈希

require 'yaml'
path = File.join(Rails.root, 'config', 'stage-aws-opscode.yml')
SAO = YAML.load_file(path)

stage-aws-opscode.yml 包含以下数据

sandbox: &defaults
  amazon: aws-green
  chef: mdsol

validation:
  <<: *defaults

cruise:
  <<: *defaults

hendricks:
  <<: *defaults

distro:
  <<: *defaults

performance:
  <<: *defaults

innovate:
  amazon: aws-red
  chef: mdsol-production

production:
  amazon: aws-red
  chef: mdsol-production

这是我的迭代。

<%
 SAO.each do |key, value| 
 parent = "#{key}" 
  value.each do |a, b| 
   "#{a}"  "#{b}"
  end 
end
    %>

【问题讨论】:

  • 这个问题恐怕还是有点不清楚。你能发布一个预期输出的例子吗? (不必是HTML,文字即可)
  • 我想你要的是亚马逊名单和厨师名单?
  • 这些值是由我在上面列出的 yaml 文件生成的。不确定这是否足够清楚,但我会尝试。这个想法是,如果用户从下拉菜单中选择沙箱,则 amazon 的值应该是 aws-green,而 chef 的值应该是 mdsol。

标签: ruby-on-rails hash loops


【解决方案1】:

你想要这个吗:

SAO.each do |k,v|
 puts "env: #{k}; amazon: #{v[:amazon]}; chef: #{v[:chef]}; "
end

如果你在 2 个列表之后,那么你需要 2 个独立的循环。

【讨论】:

  • 这几乎就是我的意思。我会给你一个例子。如果环境是沙箱,amazon 的值应该是 aws-green,chef 的值应该是 mdsol。如果您查看上面的 yaml 示例,您就会明白我的意思。谢谢
  • 你只是想像我们做 database.yml 一样构建配置吗?如果是这样,您只需要YAML.load_file(path)[RAILS_ENV]
  • 感谢您的提示。那不是问题。我的 yaml 文件已经在工作了。这是对该文件的迭代,它是我遇到问题的内容。
  • 您仍然没有正确解释您希望输出的样子。
  • SAO.each 做 |k,v| puts "env: #{k};
猜你喜欢
  • 2014-06-01
  • 1970-01-01
  • 2016-01-27
  • 2013-11-25
  • 2016-04-12
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多