En la lista necesito reemplazar cada elemento con la suma de este elemento y todos los anteriores. El primer elemento no está obligado a cambiar. Ejemplo: La lista (1.0, 2.0, 3.0, 4.0) debe convertirse (1.0, 3.0, 6.0, 10.0). Estoy buscando la forma más concisa y correcta.
Estuve googleando mucho tiempo y no pude encontrar ninguna información útil respecto a la conversión de un elemento por la suma de sus anteriores. Además, no pude encontrar la función requerida en la biblioteca estándar en Kotlinlang.org. Por favor ayuda a resolver este problema.
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 }Tienes que usar una variable que almacene la suma acumulada.
fun accumulate(list: MutableList<Double>): MutableList<Double> { var runningSum = 0.0 list.indices.forEach { i -> runningSum += list[i] list[i] = runningSum } return list }Tenga en cuenta que una lista vacía no es un caso especial para este código.
Si prefiere hacerlo de la manera FP y transformar la lista de forma no destructiva, puede escribir esto:
fun accumulate(list: List<Double>): List<Double> { var runningSum = 0.0 return list.map { runningSum += it runningSum } }Puedes escribir esto de manera más simple usando slice() y sum() :
fun accumulate(list: MutableList<Double>) = list.mapIndexed { index, d -> list.slice(0..index).sum() }.toMutableList()