【问题标题】:Add string to array nested inside of hash将字符串添加到嵌套在哈希内的数组中
【发布时间】:2016-11-25 04:20:37
【问题描述】:

我有一组嵌套哈希。我想将字符串“Assembly”添加到与 [:dennis_ritche][:languages]

关联的数组值中
def adding_to_dennis
    programmer_hash =
        {
        :grace_hopper => {
          :known_for => "COBOL",
          :languages => ["COBOL", "FORTRAN"]
        },
        :alan_kay => {
          :known_for => "Object Orientation",
          :languages => ["Smalltalk", "LISP"]
        },
        :dennis_ritchie => {
          :known_for => "Unix",
          :languages => ["C"]
        }
     }
        programmer_hash[:dennis_ritchie][:languages] << "Assembly"
end

这是我没有将 Symbol 隐式转换为 Integer 的错误"

【问题讨论】:

  • 此代码按原样工作。我不确定你为什么将它包装在一个方法中,但也许这就是问题所在。
  • 是的,我认为它应该可以工作。我必须把它包装在一个方法中,让它在学习环境中通过测试。

标签: arrays ruby hash


【解决方案1】:

我认为您看到的问题是您正在操作方法内部的哈希,结果无意中返回了错误的东西。此方法返回一个数组,因为这是执行的最后一个操作(数组上的&lt;&lt; 返回修改后的数组)。

要修复它,请定义一个执行操作的方法:

def add_to_hash(hash, programmer = :dennis_ritchie, language = 'Assembly')
  hash[programmer][:languages] << language
end

使其独立于定义:

programmer_hash =
    {
    :grace_hopper => {
      :known_for => "COBOL",
      :languages => ["COBOL", "FORTRAN"]
    },
    :alan_kay => {
      :known_for => "Object Orientation",
      :languages => ["Smalltalk", "LISP"]
    },
    :margaret_hamilton => {
      :known_for => "Apollo Program",
      :languages => ["Assembly"]
    },
    :dennis_ritchie => {
      :known_for => "Unix",
      :languages => ["C"]
    }
 }

然后调用它来操作哈希:

add_to_hash(programmer_hash)

然后更新programmer_hash 结构。

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2017-12-11
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多