Ruby on rails 在ruby中迭代时更新数组

Ruby on rails 在ruby中迭代时更新数组,ruby-on-rails,arrays,Ruby On Rails,Arrays,我有一个数组,其中第一行包含标题,第一列包含日期。数组中的最后一列是总计 [["date", "Fish", "Bear", "Cat", "Total"], ["8/1/2014", 5, 3, 6, 0], ["8/1/2014", 2, 6, 3, 0]] 我需要汇总每行列的值,并用该值更新最后一列。这是我到目前为止所做的。这是我实际更改数组值的部分,我无法退出 arr.each_with_index do |row,index| sum

我有一个数组,其中第一行包含标题,第一列包含日期。数组中的最后一列是总计

[["date",  "Fish",  "Bear",  "Cat",  "Total"],  
["8/1/2014",  5,  3,  6,  0],   
["8/1/2014",  2,  6,  3,  0]] 
我需要汇总每行列的值,并用该值更新最后一列。这是我到目前为止所做的。这是我实际更改数组值的部分,我无法退出

  arr.each_with_index do |row,index|
    sum = 0
    next if index == 0
    row.each_with_index do |col,index2|
      next if index2 ==0
      if (col == row.last)
        #update the col with the value of sum
      end
      sum += col.to_i
    end
  end 

PS:如果我没有正确格式化,我深表歉意。我正在尝试学习如何使我的问题看起来更漂亮。

您可以使用
.shift
删除数组的第一个元素(这是一个包含列名的数组):

然后,您可以在
数据
数组上循环,并对所需列求和:

data.each_with_index do |row, i|
  total = row[1] + row[2] + row[3]
  row[4] = total
end

您需要使用行的长度来检查是否在最后一列,而不是列中的值。然后还需要设置行上的值(按索引),而不是更改本地
col
对象的值

arr.each_with_index do |row,index|
  sum = 0
  next if index == 0
  row.each_with_index do |col,index2|
    next if index2 == 0
    if (index2 == row.length - 1)  
      row[index2] = sum
    else
      sum += col.to_i
    end
  end
end 

如果需要,请参阅以从数据中删除第一行。我的回答不会这样做,这意味着最终的数组仍然包含标题。

这是CSV文件吗?如果是这样,您可以使用ruby CSVD数组结构是否总是这样?数据类型是否始终相同,意味着从第二行开始,第一个元素将作为日期,其余元素将作为整数。这只允许固定长度的行。
arr.each_with_index do |row,index|
  sum = 0
  next if index == 0
  row.each_with_index do |col,index2|
    next if index2 == 0
    if (index2 == row.length - 1)  
      row[index2] = sum
    else
      sum += col.to_i
    end
  end
end