1

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

子と親にアクセスするにはどうすればよいですか?

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

他の回答のようにネストされたループは必要ありません。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 に答える