替换嵌套在数组中的哈希的键值

问题描述

我有一个带有两个嵌套哈希的数组(测试)。试图做的是替换第一个哈希(事物)的键值(“ idea” =>“ Hi”)。但是,当我运行程序时,它崩溃了,并且我没有收到错误消息。我尝试了一些变体,但结果相同,因此我显然错过了关键一步。

预先感谢您的帮助。

test=[thing={"idea"=>"Hi","dumb"=>"test"},thing2={"idea"=>"not sure","dumb"=>"not"}]
puts test [0]

test=[0] [thing] ["idea"]="Bye"
puts test [0]
gets

解决方法

您需要:

  • 引用哈希键,
  • 在哈希键和值之间使用=>代替=
  • 将大括号括起来,
  • =中另外删除test=[0] [thing] ["idea"]
test = [{'thing' => { 'idea'=>'Hi','dumb' => 'test' }},{'thing2' => {'idea' => 'not sure','dumb' => 'not'}}]
puts test[0] # {"thing"=>{"idea"=>"Hi","dumb"=>"test"}}
test[0]['thing']['idea']='Bye'
puts test[0] # {"thing"=>{"idea"=>"Bye","dumb"=>"test"}}


还请注意,您发布的原始代码给我一个错误,与您观察到的相反:

test=[thing={"idea"=>"Hi","dumb"=>"test"},thing2={"idea"=>"not sure","dumb"=>"not"}]
puts test [0]

test=[0] [thing] ["idea"]="Bye" # Error: no implicit conversion of Hash into Integer (TypeError)

此错误消息应提醒您此行(或之前)发生了问题。该错误可能看起来很神秘。但是,最接近的原因是thing之前已将thing={"idea"=>"Hi","dumb"=>"test"}分配给哈希。并且在这一行上,解释器尝试将thing哈希用作数组[0]的(整数)索引,并且无法将哈希转换为整数。请注意,解释器尝试将[0] [thing] ["idea"]="Bye"视为分配。

长话短说,请确保显示错误消息。例如,可以通过将stderr重定向到文件或/dev/null来隐藏它们。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...