在我自己编写之前,有没有人知道Groovy或Java是否有预先构建的内容类似于Excel的sumproduct函数?
sumproduct的准语法类似于
#groupPicture
你会得到120((2 * 5)+(3 * 10)+(4 * 20)= 120)
答案 0 :(得分:6)
您可以transpose()
,collect()
和sum
结果:
def list1 = [2,3,4]
def list2 = [5,10,20]
assert [list1, list2]
.transpose()
.collect { it[0] * it[1] }
.sum() == 120
答案 1 :(得分:2)
并非真正的开箱即用SUMPRODUCT替代品,但仍然是单线:
def list1 = [2,3,4]
def list2 = [5,10,20]
assert 120 == GroovyCollections.transpose( list1, list2 ).sum{ it[ 0 ] * it[ 1 ] }
答案 2 :(得分:2)
这是sumproduct的一个版本,不仅限于两个输入列表:
def sumproduct(List... lists) {
(lists as List).transpose().sum { it.inject(1) { prod, val -> prod * val } }
}
使用sumproduct([2,3,4], [5,10,20], [1,2,3])
调用它会返回310。