En la lista tengo que sustituir cada elemento con la suma de este elemento y todos los anteriores. El primer elemento no es necesario para el cambio. Ejemplo: La lista (1.0, 2.0, 3.0, 4.0) deben ser convertidos (1.0, 3.0, 6.0, 10.0). Busco el más concisa y de manera correcta.
Estaba buscando en Google desde hace mucho tiempo y no pude encontrar ninguna información útil con respecto a la conversión de un elemento por la suma de las anteriores. También 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
}
Usted tiene que utilizar una variable que almacena la suma en ejecución.
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 no destructiva transformar la lista, puede escribir lo siguiente:
fun accumulate(list: List<Double>): List<Double> {
var runningSum = 0.0
return list.map {
runningSum += it
runningSum
}
}