我在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
我应该如何接触孩子和父母?
答案 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
这应该有用。