john = {"111":{"placeId":"333"} , "22":{"placeId":"22"}}
adam = [{"id": "333","doc": "30"},{"id": "22","doc": "31"}]
sams_collection = [{"some_id": "30"}, {"some_id": "31"}]
adam.each do | adam_data |
john.each_key do | john_data_key |
if (adam_data['id'] == john['john_data_key']['placeId'])
john['john_data_key']['org'][adam_data['id']] = sams_collection
end
end
end
期待約翰更新如下
#Note(當前遇到錯誤未定義的方法`[]' for nil:NilClass (NoMethodError))
john = {"111":{"placeId":"333", "org" : {"333" : ["30", "31"]} } , "22":{"placeId":"22"}}
uj5u.com熱心網友回復:
這里有幾個問題。
首先,因為您使用 JSON 格式來定義哈希:
{ a: b, c: d }
與 hashrocket 風格相反(帶有 =>):
{ a => b, c => d }
您正在使用'a' 和 'c'的符號而不是字串。具體來說,你需要查找和理解在ruby中,:a是一個符號,而“a”是一個字串。
如果您執行以下操作,您可以看到這一點:
puts adam.inspect
# returns [{:id=>"333", :doc=>"30"}, {:id=>"22", :doc=>"31"}]
如果要使用字串,則需要改用“key” => val 格式。
它變得更加混亂,因為您將數字用作字串,這會帶來一股代碼氣味 - 您真的想將這些數字存盤/參考為字串嗎?
但更令人困惑的是,您將鍵作為數字......除了它們是字串......除了它們實際上是符號。
看看約翰:
john = {"111":{"placeId":"333"} , "22":{"placeId":"22"}}
看起來您正在使用鍵 111 參考第一個散列,但它似乎是在字串中,除了由于 'a:b' 它正在成為數字字串的符號,如下所示:
:"111"
所以這是一個混亂的世界。
但除此之外,您還擁有:
john['john_data_key']
這意味著您要使用鍵“john_data_key”訪問 john 哈希 - 而不是變數 john_data_key 中的值。后者將是:
john[john_data_key]
所以你在這里有很多問題。
我建議使用除錯器來完成這個程序,或者至少做一些“puts myVariable.inspect”,這樣你就可以看到你正在創建的這些資料結構中的實際內容。
然后重新考慮您如何構建資料以及您希望如何訪問它,然后這個問題將變得更容易管理。
uj5u.com熱心網友回復:
john = {"111":{"placeId":"333"} , "22":{"placeId":"22"}}
adam = [{"id": "333","doc": "30"},{"id": "22","doc": "31"}]
sams_collection = [{"some_id": "30"}, {"some_id": "31"}]
adam.each do | adam_data |
john.each_key do | john_data_key |
if (adam_data[:id] == john[john_data_key][:placeId])
some = { adam_data[:doc] => sams_collection}
john[john_data_key][:org] = some
end
end
end
p john.to_s
感謝您的建議 --> 這是具有相同資料的作業代碼:|
"{:\"111\"=>{:placeId=>\"333\", :org=>{\"30\"=>[{:some_id=>\"30\"}, {:some_id=>\"31\"}]}}, :\"22\"=>{:placeId=>\"22\", :org=>{\"31\"=>[{:some_id=>\"30\"}, {:some_id=>\"31\"}]}}}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375552.html
