将值推入散列中的数组
Posted
技术标签:
【中文标题】将值推入散列中的数组【英文标题】:pushing a value into an array within a hash 【发布时间】:2017-10-25 22:36:38 【问题描述】:我已经在这段代码上工作了一段时间了。在我尝试将一个值推入散列中的数组之前,一切似乎都很好。 我收到一条错误消息,该值为零,但是我在尝试将所有有问题的值存储在数组中之前检查了所有有问题的值,但它仍然不允许我这样做。有任何想法吗? buckets[sdigit].push(num) 是告诉我我的值之一是 nil 的行。
arr = []
while arr.size < 100
arr.push(rand(1000))
end
for outer_index in arr
puts "for outer index(#outer_index in arr"
buckets = Hash.new()
puts "buckets = Hash.new()"
puts "for j in 0..9"
for j in 0..9
buckets[j.to_s] = Array.new()
#buckets[j.to_s] = [j]
puts "buckets[j.to_s(#buckets[j.to_s])"
end
for inner_index in arr
puts "for inner_index(#inner_index) in arr"
num = inner_index
puts "num(#num) = inner_index(#inner_index)"
sdigit = num.to_s[-1]
puts "sdigit(#sdigit) = num.to_s[-1](#num.to_s[-1])"
digit = sdigit.to_i
puts "digit(#digit) = sdigit.to_i(#sdigit.to_i)"
puts "buckets[digit] = #buckets[sdigit]"
puts "#buckets["1"]"
puts "o#num"
puts buckets
buckets[sdigit].push(num)
puts "buckets[digit].push(num)(#buckets[digit].push(num))"
end
arr = buckets.values.flatten
end `
【问题讨论】:
【参考方案1】:buckets[sdigit].push(num) 是告诉我我的值之一的行 是零。
如果您查看错误消息:
top.rb:30:in `block (2 levels) in <main>': undefined method `push' for nil:NilClass (NoMethodError)
还有你的代码:
你看到第 30 行是puts
,而不是buckets[sdigit].push(num)
。
原因:puts
显示的值与表达式使用的值之间存在差异:[digit]
而不是[sdigit]
,这就是导致错误的跟踪。
我个人在要跟踪的语句之前写了puts
跟踪,因为它显示了表达式在执行可能导致错误的语句之前将使用的值。它通常会有所帮助......除非跟踪本身有错误。
我稍微重新排列了您的代码:
arr = []
100.times arr << rand(1000)
puts arr.join(', ')
arr.each do | outer_index |
puts "===== for outer_index=#outer_index in arr"
buckets = Hash.new()
puts "buckets = Hash.new()"
puts "for j in 0..9"
(0..9).each do | j |
buckets[j.to_s] = Array.new()
#buckets[j.to_s] = [j]
puts "buckets[#j.to_s]=#buckets[j.to_s]"
end
arr.each do | inner_index |
puts "----- for inner_index=#inner_index in arr"
num = inner_index
puts "num(#num) = inner_index(#inner_index)"
sdigit = num.to_s[-1]
puts "sdigit(#sdigit) = num.to_s[-1](#num.to_s[-1])"
digit = sdigit.to_i
puts "digit(#digit) = sdigit.to_i(#sdigit.to_i)"
puts "buckets[digit] = #buckets[sdigit]"
puts "#buckets["1"]"
puts "o#num"
puts buckets
puts "buckets[sdigit].push(num)=buckets[#sdigit].push(#num)"
buckets[sdigit].push(num)
# puts "buckets[digit].push(num)(#buckets[digit].push(num))"
end
arr = buckets.values.flatten
end
【讨论】:
以上是关于将值推入散列中的数组的主要内容,如果未能解决你的问题,请参考以下文章
如何根据散列中的键/值查找键/值数据并将其添加到 Redis 中的散列?