Functional programming Kotlin减少了如何在多个元素上应用操作

Functional programming Kotlin减少了如何在多个元素上应用操作,functional-programming,kotlin,Functional Programming,Kotlin,我有一张号码表。我想进行以下操作:1*2+3*4。但是,reduce操作一次只能处理一个元素。在我的例子中,我需要一次处理两个元素。是否可以使用reduce或任何其他方法执行此操作 package com.zetcode fun main(args: Array<String>) { val nums = listOf(1, 2, 3, 4) val res = nums.reduce { total, next -> total * next }

我有一张号码表。我想进行以下操作:
1*2+3*4
。但是,reduce操作一次只能处理一个元素。在我的例子中,我需要一次处理两个元素。是否可以使用
reduce
或任何其他方法执行此操作

package com.zetcode

fun main(args: Array<String>) {

    val nums = listOf(1, 2, 3, 4)

    val res = nums.reduce { total, next -> total * next }
    println(res)
}
package com.zetcode
趣味主线(args:Array){
val nums=listOf(1,2,3,4)
val res=nums.reduce{total,next->total*next}
println(res)
}

您需要
list.chunked(2)
将您的列表转换为包含两个成员列表的列表,然后
折叠
而不是
减少
以生成结果(因为结果的类型不再与列表项的类型相同):

这主要是风格上的选择,但我更喜欢避免使用重量级的
fold
函数,而是将计算分解为更小的步骤,如下所示:

val res = nums
        .chunked(2)
        .map { it.reduce(Int::times) }
        .sum()

如果您在追求性能,由于创建的中间列表较少,因此步骤越少越好。另一方面,如果你在追求性能,你应该先使用惰性序列,然后每一步的价格就会低得多。

你需要
list。chunked(2)
将你的列表变成两个成员列表的列表,然后
折叠
而不是
减少
,以产生结果(因为结果的类型不再与列表项的类型相同):

这主要是风格上的选择,但我更喜欢避免使用重量级的
fold
函数,而是将计算分解为更小的步骤,如下所示:

val res = nums
        .chunked(2)
        .map { it.reduce(Int::times) }
        .sum()

如果您追求性能,则由于创建的中间列表较少,因此步骤较少会更好。另一方面,如果您追求性能,则应首先使用惰性序列,然后每个步骤的价格会更低。

您可以使用pairs吗?
val nums=listOf(1到2,3到4)
then
nums.map{it.first*it.second}.sum()
我需要一个列表或数组以及一个函数操作。你可以使用pairs吗?
val nums=listOf(1到2,3到4)
然后
nums.map{it.first*it.second}.sum()
我需要一个列表或数组以及一个函数操作。