Kotlin中列表或数组的产品

And*_*ton 5 kotlin

我试图找到一种方法来获得List或Array的产品而不使用"重复"或Kotlin上的任何循环但经过一些研究我找不到类似的东西.

Python中的这样的东西是:

>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
output: 720
Run Code Online (Sandbox Code Playgroud)

uzi*_*lan 11

一个更简单的解决方案可能是: (1..6).reduce(Int::times)


Raf*_* G. 8

使用fold功能

val total = listOf(1, 2, 3, 4, 5).fold(1, { total, next -> total * next })
Run Code Online (Sandbox Code Playgroud)

  • 这是可行的,但折叠的效率低于减少。如果 a) 您的起始值不包含在集合中,或者 b) 操作涉及类型转换(即折叠的输出与集合的泛型类型不同),请使用折叠。 (2认同)

Bob*_*Bob 8

你可以reduce在Kotlin中使用.

来自doc:

从第一个元素开始累积值,并从左到右应用操作到当前累加器值和每个元素.

val list = listOf<Int>(1, 2, 3, 4, 5, 6)

val array = intArrayOf(1, 2, 3, 4, 5, 6)

list.reduce { acc, i ->  acc * i }  // returns 720

array.reduce { acc, i -> acc * i }  // returns 720
Run Code Online (Sandbox Code Playgroud)