Scala新手求助:实现矩阵所有元素总和的函数(解决报错)
解决Scala矩阵元素求和的错误问题
你的代码报错是因为reduce操作里的a和b都是Vector[Int]类型,Scala的Vector并没有定义+运算符来实现元素级别的求和,所以会提示"value + is not a member of Vector[Int]"。
下面是几种正确实现矩阵所有元素总和的方式:
方法一:展平后求和
先将二维Vector展平为一维,再调用sum方法:
val pixels = Vector( Vector(0, 1, 2), Vector(1, 2, 3) ) def sum(matrix: Vector[Vector[Int]]): Int = { matrix.flatten.sum } println(sum(pixels)) // 输出9
flatten会把嵌套的Vector合并成包含所有元素的一维集合,之后的sum就能直接计算所有元素的总和。
方法二:先求每行和再累加
对每个子Vector单独求和,再将这些行的总和相加:
def sum(matrix: Vector[Vector[Int]]): Int = { matrix.map(_.sum).sum }
map(_.sum)会把每个子Vector转换成它自身的元素和,得到一个存储每行总和的一维Vector,最后再对这个集合求和。
方法三:使用foldLeft手动累加
通过foldLeft初始化总和,遍历每行并累加:
def sum(matrix: Vector[Vector[Int]]): Int = { matrix.foldLeft(0) { (total, row) => total + row.sum } }
初始总和设为0,每次迭代将当前行的元素和加到总结果中,最终得到所有元素的总和。
内容的提问来源于stack exchange,提问作者Aaricia-Lila
相关产品推荐
相关产品推荐

