【问题标题】: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 `

【问题讨论】:

    标签: arrays ruby sorting hash radix-sort


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 2011-04-16
      • 2017-01-24
      • 1970-01-01
      • 2019-08-21
      • 2014-05-19
      • 1970-01-01
      • 2010-11-20
      • 2011-08-15
      相关资源
      最近更新 更多