gpt4 book ai didi

arrays - 在 foldLeft 中递增变量

转载 作者:行者123 更新时间:2023-12-04 09:00:30 25 4
gpt4 key购买 nike

我有这样的 Scala 代码

var i = 1
for(e <- array) {
acc += e * i
i += 1
}

我需要将数组中的第一个元素乘以 1,下一个乘以 2,下一个乘以 3,依此类推,将其全部添加到累加器中。我觉得在 Scala 中有更好的方法可以做到这一点,甚至可能折叠?

最佳答案

“更好”取决于您的目标是什么。简短明了?大概

{ for (i <- array.indices; e = array(i)) yield (i+1)*e }.sum

或者
array.indices.map(i => (i+1)*array(i)).sum

(或者稍微快一点,因为您可以随时创建中间体:
array.indices.iterator.map(i => (i+1)*array(i)).sum

)。

你通常应该简短明了。

快速地?然后你需要去老派:
var i = 0
var acc = 0
while (i < array.length) {
acc += (i+1)*array(i)
i += 1
}

或使用递归
def sum(a: Array[Int], i: Int = 0, acc: Int = 0): Int =
if (i >= a.length) acc else sum(a, i+1, (i+1)*a(i) + acc)
sum(array)

关于arrays - 在 foldLeft 中递增变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15227488/

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