数组不能强制为Integer(TypeError)

时间:2019-05-14 01:52:46

标签: arrays ruby

我能够使此代码在本地运行,但在黑客级别上失败 我尝试了许多组合,但一定缺少一些东西。 我不明白为什么sum += x根据输出给出数组错误

我收到此错误:

solution.rb:24:in'+':数组不能被强制为Integer(TypeError)

  def diagonalDifference(arr)
    arr.each do |e|
      p e
    end
    the_arr = arr.dup
    left_to_right(3, the_arr)
  end

  def left_to_right(the_size, the_data)
    sum = 0
    (0..the_size-1).each do |diagonal|
      this_value = (the_size * diagonal) + diagonal
      p "v= " + this_value.to_s
      x = the_data[this_value]
      p "this_sum= " + x.to_s
      sum += x  # <-- line 24
    end
    sum
  end

Debug output
[11, 2, 4]
[4, 5, 6]
[10, 8, -12]
"v= 0"
"this_sum= [[11, 2, 4], [4, 5, 6], [10, 8, -12]]"


arr would be a value such as [1,2,3,9,8,7,-4,-5,-4]

问题似乎与

有关
the_data[this_value]

我似乎没有得到值,而是得到了一个数组?

2 个答案:

答案 0 :(得分:1)

输入是print(len(''.encode('utf16'))) # is 2 print(len(''.encode('utf8'))) # is 0

之类的矩阵

我猜您想在传递给[[11, 2, 4], [4, 5, 6], [10, 8, -12]]之前将矩阵更改为数组。您可以使用left_to_right

flatten

答案 1 :(得分:0)

问题似乎出在this one上。

一个人可以如下计算所需值。

def diagonal_difference(arr)
 (arr.each_index.sum { |i| arr[i][i] - arr[i][-i-1]}).abs
end

arr = [
  [11, 2,   4],
  [ 4, 5,   6],
  [10, 8, -12]
]

diagonal_difference(arr)
  #=> 15