【发布时间】:2015-06-25 08:53:31
【问题描述】:
我正在尝试学习如何迭代数组,因此我自己编写了一些场景来练习。
假设我给定的矩阵是二维的,因此是二维的。大批。 mat =[[1,2,300,-400],[0,3,-1,9],[3,4,-5,1]]
任务 1) 返回值总和最大的数组。 任务 2)假设这个 Array 可以产生一个 nxm 矩阵,返回封闭数字之和最高的行和列的值。 为了更容易理解,让我们在这里使用不同的矩阵。 垫= [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] 所以它看起来像这样:
1111
2222
3333
4444
结果将是 [2,1] 或 [2,2] 因为这些数字的总和 (2+2+2+3+3+4+4+4) = 24 是最高的。
到目前为止,这是我的实现:
任务 1) 我只能通过在类 Array 中添加 sum 函数来解决这个问题。
def max_row(mat)
return mat.max{|a,b| a.sum <=> b.sum }
end
class Array
def sum
sum = 0
self.each(){|x|
sum += x
}
return sum
end
end
我确实想在不使用额外方法的情况下解决它,但我不知道该怎么做。 到目前为止我的想法:
def max_row(mat)
sum_ary = []
mat.each(){|ary|
sum = 0
ary.each(){|x|
sum += x
}
sum_ary << [sum]
}
我在 sum_ary 上尝试了 find_index,但在实现时它返回第一个不为 false 的值,因此我无法使用它来搜索最大值。
实施任务 2): mat = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]
def max_neighbor_sum(mat)
sum_result = []
for n in 0...mat.size()
for m in 0...mat.size()
sum = 0
for a in (n-1)..(n+1)
for b in (m-1)..(m+1)
if m != nil && n !=nil && a>=0 && b>=0 && a<= (mat.size()-1)
# print "n:#{n} m:#{m} a:#{a} b:#{b} \n"
# p mat[a][b]
if mat[a][b] !=nil && !(n==a && m==b)
sum += mat[a][b]
end
end
end
end
sum_result << sum
# p sum_result
end
end
return sum_result
end
我正确计算了所有的总和,但现在不知道如何获取行和列的索引。
希望你能理解我在哪里需要帮助。
【问题讨论】:
-
旁注:您的
Array#sum方法可能会像reduce(&:+)一样简单地重写。试试:[1,2,3,4].reduce &:+. -
谢谢,我会检查一下以了解语法。
-
我不确定我的@yourname 是否有效,因此请查看我的最新评论以获取以下答案吗?