【问题标题】:two multidimensional array handling in rubyruby 中的两个多维数组处理
【发布时间】:2011-04-13 16:37:22
【问题描述】:

我有一个这样的数组

[["1"], ["2","3"]]

一开始我有这个算法

maxarray = []
i = 0
m = array.count
while i < m do
  x = 0
  s = array[i].count
  while x < s do
    maxarray[i][x] = (Integer(array[i][x]) + [Integer(maxarray[i-1][x-1]), Integer(maxarray[i-1][x])].max)
    x+=1 
  end
  i+=1
end

错误是这样的:

`<main>': undefined method `[]' for nil:NilClass (NoMethodError)

所以我认为数组索引可能出错了所以我扩展了我的算法

maxarray = []
i = 0
m = array.count
while i < m do
  x = 0
  s = array[i].count
  while x < s do
    if i-1 < 0 
        item2 = 0
    elsif i-1 < 0 && x-1 < 0 
        item1 = 0
    else item1 = maxarray[i-1][x-1] 
         item2 = maxarray[i-1][x] 
    end
    maxarray[i][x] = (Integer(array[i][x]) + [Integer(item1), Integer(item2)].max)
    x+=1 
  end
  i+=1
end

但现在我有一个不同的错误:

`Integer': can't convert nil into Integer (TypeError)

如何防止这个错误并运行脚本?

【问题讨论】:

  • 为什么不使用:maxarray.each do |cur_x| (do_something) end 你这里没有使用 Ruby 的力量 :)
  • 也许你可以解释你正在尝试做什么而不是给出你当前的解决方案......
  • @Chris McCauley 就在中间maxarray = (Integer(array[i][x]) + [Integer(item1), Integer(item2)].max) :)
  • 是的,使用each 而不是糟糕地重新实现它。不,不要从[] 切换到Array.new。 @Mikee:克里斯要求解释,而不是复制/粘贴。
  • 如果您能描述问题的最佳方式是说您想要一些“充满数据”的东西,我无法帮助您。这令人担忧,因为有效沟通是程序员的一项基本技能。

标签: ruby arrays multidimensional-array


【解决方案1】:

您为什么不flatten 阵列并进行计算?当然它会让你的功能更简单。

【讨论】:

  • 这看起来像是一些涉及动态编程的任务,它依赖于数据集的多个维度来保持代码更简单。这是猜测,因为即使是作者也无法解释他的意图。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 2018-06-28
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多