gpt4 book ai didi

java - Groovy中HashMap的点积

转载 作者:行者123 更新时间:2023-11-29 04:36:25 26 4
gpt4 key购买 nike

我有两个 LinkedHashMap具有相同的一组键。我想根据键在它们之间执行点积。

这就是我目前的做法:

def dotProduct(a,b) {
acc = 0
a.keySet().each { acc += a[it] * b[it] }
acc
}

有没有更清晰/更快的方法?

最佳答案

您可以利用 inject 获得与您现在正在执行的解决方案非常相似的解决方案(Groovy 的 functional fold ),因此:

def a = [1:1, 2:2, 3:3]
def b = [1:2, 2:4, 3:6]

assert (1*2 + 2*4 + 3*6) == a.inject(0) { result, k, v -> result += v * b[k] }

无论如何,Alin Pandichi 的解决方案

assert 28 == a.keySet().collect({ a[it] * b[it] }).sum()
如果您不太熟悉函数式 groovy,

可能会更清楚。请注意,这会在对所有值求和之前创建一个数字数组。

如果您使用的是 Java 8 和 Groovy > 2.3,则可以利用 Java 8 Streams API 并将 Groovy 闭包用作 Java lambda:

assert 28 == a.entrySet().stream().mapToInt({ it.value * b[it.key] }).sum()

哪里IntStream.sum()使用而不是 Iterable.sum() .

关于java - Groovy中HashMap的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com