You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:45:06