【问题标题】:How to add value to an array inside of a hash with ruby如何使用 ruby​​ 向哈希内的数组添加值
【发布时间】:2016-02-10 23:25:42
【问题描述】:
contacts_r = File.open("user_contacts.txt", "r")

user_contacts = []
contacts_r.readlines.each { |line|
  user_contacts << line.chomp
}

$c = Hash[user_contacts.map { |x| ["$#{x}_called", Array.new] } ]

当我尝试在所需的数组中添加信息时...

$c["#{name}_called"] << 1

我得到一个未定义的方法'&lt;&lt;' for nil:NilClass (NoMethodError)

当我使用..

puts $c

输出看起来像

{"$robert_called"=>[]}

我试图让它看起来像

{"$robert_called"=>[1]}

【问题讨论】:

  • 什么是name?如果不是"robert",则错误很明显。您的代码看起来还不错。 (我可能会将整个事情压缩成user_contacts = File.read(filename).lines.map(&amp;:chomp) 或懒惰的user_contacts = File.open(filename) { |f| f.each_line.map(&amp;:chomp) },并使用带有默认proc(c = Hash.new { |h, k| h[k] = [] })的哈希,所以我根本不需要初始化它......另外,请注意全局变量,他们有一个讨厌的习惯,在背后咬你。
  • "#{name}" 我的意思只是名称所在的地方......它实际上不是代码的一部分:\ @Amadan

标签: arrays ruby hash hashmap


【解决方案1】:

你忘了在前面加上$

$c["$#{name}_called"] << 1

【讨论】:

  • ...和$[k] =&gt; nil(即,键k的值是nil)如果哈希没有键k,所以$c[k] &lt;&lt; 1变成nil &lt;&lt; 1 . nilNilClass 的唯一实例。 NilClass 没有实例方法:&lt;&lt;,这意味着nil 没有方法:&lt;&lt;。这正是错误消息告诉您的内容。仔细研究错误信息。他们通常会找出问题所在。
  • 你的权利,我忘了把 $ 放在数组名称中。而且我还是相当新的(甚至不到一年),所以我会更加注意错误所说的内容,谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2015-08-09
  • 2023-03-03
  • 2012-01-07
  • 1970-01-01
  • 2018-02-17
  • 2017-03-21
相关资源
最近更新 更多