在寫我自己的之前,有沒有人知道Groovy或Java是否有一些與Excel的sumproduct函數類似的預構建的東西?Groovy或Java相當於sumproduct?
爲SUMPRODUCT準語法是一樣的東西
def list1 = [2,3,4]
def list2 = [5,10,20]
SUMPRODUCT(list1, list2 ...) = 120
你會得到120((2 * 5)+(3 * 10)+(4×20)= 120)
在寫我自己的之前,有沒有人知道Groovy或Java是否有一些與Excel的sumproduct函數類似的預構建的東西?Groovy或Java相當於sumproduct?
爲SUMPRODUCT準語法是一樣的東西
def list1 = [2,3,4]
def list2 = [5,10,20]
SUMPRODUCT(list1, list2 ...) = 120
你會得到120((2 * 5)+(3 * 10)+(4×20)= 120)
您可以transpose()
,collect()
和sum
結果:
def list1 = [2,3,4]
def list2 = [5,10,20]
assert [list1, list2]
.transpose()
.collect { it[0] * it[1] }
.sum() == 120
不是真的出的現成的替代SUMPRODUCT,但仍然是一個班輪:
def list1 = [2,3,4]
def list2 = [5,10,20]
assert 120 == GroovyCollections.transpose(list1, list2).sum{ it[ 0 ] * it[ 1 ] }
這裏有一個版本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
你不應該叫'GroovyCollections.transpose'直接。這是一個擴展方法添加到集合 –
@tim_yates,不''[list1,list2]'實例化1個額外的列表比較'GroovyCollections.transpose()'? – injecteer