Ruby遍历数组更新哈希时出现NilClass无[]方法报错如何解决
Ruby 哈希结构更新问题解决
错误原因
你的代码存在3个核心问题:
- 错误将迭代变量
john_data_key写为字符串'john_data_key',导致实际访问的是john中不存在的键,返回nil后调用[]方法触发报错 - 没有提前初始化嵌套的
org字段,直接对nil值的org做哈希赋值操作会触发相同的nil方法报错 - 预期结果中
org对应的值是some_id的字符串集合,需要先从sams_collection中提取对应字段,不能直接塞入原数组
修正后的代码
以下代码默认所有哈希键为字符串,和你的写法对齐:
# 原始变量(调整哈希分隔符为Ruby标准的=>) john = {"111"=>{"placeId"=>"333"} , "22"=>{"placeId"=>"22"}} adam = [{"id"=> "333","doc"=> "30"},{"id"=> "22","doc"=> "31"}] sams_collection = [{"some_id"=> "30"}, {"some_id"=> "31"}] # 提前提取sams_collection的some_id集合,匹配预期输出结构 sams_ids = sams_collection.map { |item| item["some_id"] } adam.each do |adam_data| john.each_key do |john_data_key| current_john_val = john[john_data_key] if adam_data["id"] == current_john_val["placeId"] # 先初始化org字段为空哈希(不存在时才初始化,避免覆盖原有值) current_john_val["org"] ||= {} current_john_val["org"][adam_data["id"]] = sams_ids end end end
运行结果
执行完上述代码后,john的结构和预期完全一致:
{"111"=>{"placeId"=>"333", "org"=>{"333"=>["30", "31"]}}, "22"=>{"placeId"=>"22"}}
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

