【问题标题】:How to populate a new list inside reduce function - Kotlin如何在 reduce 函数中填充新列表 - Kotlin
【发布时间】:2020-07-28 08:27:16
【问题描述】:

reduce函数是查找Array/List中元素总数的首选

我想创建一个总计的数组,直到数组的索引。

所以[2,1,2,1,2,1,1] 作为输入,我期待[2, 3, 5, 6, 8, 9, 10] 作为输出

我知道 Javascript 方式,但无法在 Kotlin 中获得它 JSFiddle here

var sumArr = []
var res = intrv.reduce((a,b) => {
     sumArr.push(a+b); 
 return a+b
})
console.log(sumArr)

Kotlin 代码等效项应该是什么

Kotlin Playground trials

【问题讨论】:

    标签: android kotlin data-structures logic


    【解决方案1】:

    几乎 1:1 的转换:

    var intrv = listOf(0,2,1,2,1,2,1,1)
    var sumArr : MutableList<Int> = mutableListOf()
    val sum = intrv.reduce { a, b -> sumArr.add(a+b); a + b }
    println(sumArr)
    

    打印:

    [2, 3, 5, 6, 8, 9, 10]
    

    【讨论】:

    • 整洁!学习 - Lamba 身体没有大括号,没有回报(因为最后一行是默认的)
    • 不,我现在看到@RahulKahale 没有在问题中添加 0 作为第一个元素,但它在 fiddler js 示例中 - 我使用 fiddler js 示例作为转换为 kotlin 的源代码。
    • 是的..我对零很好。减少需要总和的起点......不是问题。棘手的部分是 Kotlin 语法。
    • 是的,这并不明显。但是看看它带来的性能优势。无需在循环中切片。
    • 如果你不希望 0 作为第一个元素,那么我建议使用fold,如下所示:pl.kotl.in/Uurg29xiH
    【解决方案2】:

    首先想到的是sliceArray()sum()

    var gg = arrayOf<Int>(2,1,2,1,2,1,1)
    val mg = gg.mapIndexed { index, _ ->  gg.sliceArray(0..index).sum() }
    println(mg)
    

    将打印:

    [2, 3, 5, 6, 8, 9, 10]
    

    对于每个项目,您从项目的位置开始获取数组的一个切片,然后对该切片求和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多