【发布时间】:2021-09-15 05:17:18
【问题描述】:
Ruby 新手,一般编码新手... 我正在尝试将新元素添加到我的哈希中,并在必要时增加值。所以我使用了 Hash.new(0) 并尝试使用“+=”符号添加新值,但是当我这样做时,我收到一条错误消息 -
"/tmp/file.rb:6:in `+': String can't be coerced into Integer (TypeError)
from /tmp/file.rb:6:in `block in stockList'
from /tmp/file.rb:3:in `each'
from /tmp/file.rb:3:in `each_with_index'
from /tmp/file.rb:3:in `stockList'
from /tmp/file.rb:24:in `<main>'
"
这是我的代码:
def stockList(stock, cat)
hash = Hash.new(0)
stock.each_with_index do |word, i|
if cat.include?(word[i])
char = word[i]
hash[char] += num(word)
end
end
new_arr = []
hash.each do |k, v|
new_arr.push(k,v)
end
return new_arr
end
def num(word)
nums = "1234567890"
word.each_char.with_index do |char, i|
if nums.include?(char)
return word[i..-1]
end
end
end
puts stockList(["ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600"], ["A", "B"])
有人知道为什么会这样吗?
这是一个代码战挑战——我基本上得到了两个数组,旨在返回一个字符串,该字符串将与以第二个数组中列出的字母开头的单词相关联的数字相加。
对于这个输入,我打算返回“ (A : 200) - (B : 1140) ”
【问题讨论】:
-
您到底想得到什么结果?我已经在您的代码中突出显示了一些奇怪的东西,但是如果不了解您的目标就很难给您指示 - 而且仅从代码中很难获得。
-
哦!好吧,我现在明白了……对,对,对……因为当我添加到哈希中时……然后我会在必要时尝试将两个数字相加。好,知道了。谢谢!!
-
在您添加解释后,我明白您为什么尝试使用 word[i],而不是整个单词作为哈希键。不过,这是一个逻辑错误:您不想在每一步都移动字母索引。用示例更新了我的答案。