访问Ruby中的数组中的数据

时间:2012-10-17 17:01:34

标签: ruby-on-rails ruby arrays each

我在Ruby中的“each”语句中访问数据时遇到问题。我正在从SQL查询中获取数据,

mysql> select * from mantis_bug_relationship_table WHERE relationship_type = 2 AND destination_bug_id = 753;
+-----+---------------+--------------------+-------------------+
| id  | source_bug_id | destination_bug_id | relationship_type |
+-----+---------------+--------------------+-------------------+
| 103 |           765 |                753 |                 2 |
+-----+---------------+--------------------+-------------------+

然后我将每个结果添加到一个数组中,使其relationship_type为2,

parent_map = {}
current = 1

# for each loop is here that populates parent_map

parent_map[current] = { issues_map[relation.destination_bug_id] => issues_map[relation.source_bug_id] }
current += 1

# for each loop is here that populates parent_map

然后我尝试从parent_map读取数据,如下所示:

parent_map.each do |child, parent|
    pp parent_map   
    print "child: #{child}\n"
    print "parent: #{parent}\n"
    print "---------------------------------------\n"
    STDOUT.flush
  end

输出如下:

{1=>{753=>765}}
child: 1
parent: 753765

输出应为:

child: 753
parent: 765

我应该如何接触孩子和父母?

3 个答案:

答案 0 :(得分:3)

您实际上是在处理示例中的哈希值,而不是数组。

array = []
hash = {}

在你的parent_map.each循环中,你抓住了关键和价值。您的密钥由初始填充循环中的current变量填充,而您的值也是包含您要访问的父级和子级的哈希值。

假设你想要你的值哈希,你需要一个子循环,ala:

parent_map.each do |key, val| # This val is your hash: {753=>765}
  val.each do |child, parent|
    puts "child: #{child}" # 753
    puts "parent: #{parent}" # 765
  end
end

答案 1 :(得分:2)

您不需要像其他答案那样嵌套循环。取第二个参数并将其分解。

parent_map.each do |_, (child, parent)|
  pp parent_map
  puts "child: #{child}"
  puts "parent: #{parent}"
  puts "---------------------------------------"
  STDOUT.flush
end

答案 2 :(得分:0)

parent_map.each do |current, issues_hash|
  issues_hash.each do |key, value|
    print "child: #{key}\n"
    print "parent: #{value}\n"
  end
end

这应该有用。