1

我在 Ruby 的“每个”语句中访问数据时遇到问题。我正在从 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 |
+-----+---------------+--------------------+-------------------+

然后我将每个结果添加到一个数组中,这样的关系类型为 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

我应该如何访问孩子和父母?

4

3 回答 3

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
于 2012-10-17T17:13:51.000 回答
2

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

parent_map.each do |_, (child, parent)|
  pp parent_map
  puts "child: #{child}"
  puts "parent: #{parent}"
  puts "---------------------------------------"
  STDOUT.flush
end
于 2012-10-17T17:37:21.647 回答
0
parent_map.each do |current, issues_hash|
  issues_hash.each do |key, value|
    print "child: #{key}\n"
    print "parent: #{value}\n"
  end
end

这应该有效。

于 2012-10-17T17:17:46.083 回答