Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return multiple elements from collection?

Tags:

java

kotlin

In the list I need to replace each element with the sum of this element and all previous ones. The first element is not required to change. Example: The list (1.0, 2.0, 3.0, 4.0) must be converted (1.0, 3.0, 6.0, 10.0). I'm looking for the most concise and correct way.

I was googling for a long time and could not find any useful information regarding the conversion of an element by the sum of its previous ones. Also I could not find the required function in the standard library at Kotlinlang.org. Please help solve this problem.

fun accumulate(list: MutableList<Double>): MutableList<Double> {
    if (list.isEmpty()) return list
    else for (i in 0 until list.size) {
        if (i == list.indexOf(list.first())) list[i] = list.first()
        else list[i] = list.sumByDouble { it } // here's my problem
    }
    return list
}
like image 494
rost Avatar asked Aug 21 '26 14:08

rost


1 Answers

You have to use a variable that stores the running sum.

fun accumulate(list: MutableList<Double>): MutableList<Double> {
    var runningSum = 0.0
    list.indices.forEach { i ->
        runningSum += list[i]
        list[i] = runningSum
    }
    return list
}

Note that an empty list is not a special case for this code.

If you'd prefer to do it the FP way and non-destructively transform the list, you can write this:

fun accumulate(list: List<Double>): List<Double> {
    var runningSum = 0.0
    return list.map {
        runningSum += it
        runningSum
    }
}
like image 127
Marko Topolnik Avatar answered Aug 24 '26 05:08

Marko Topolnik



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!