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