我想对Kotlin列表中的连续数字求和。如果列表中有一个0,那么它应该从0之后的数字开始求和。结果将是一个求和列表。基本上求和直到第一个0,然后直到下一个0,依此类推。例如:
val arr = arrayOf(1, 2, 0, 2, 1, 3, 0, 4)
// list of sums = [3, 6, 4]
现在我用fold
来运行它:
val sums: List<Int> = arr.fold(listOf(0)) { sums: List<Int>, n: Int ->
if (n == 0)
sums + n
else
sums.dropLast(1) + (sums.last() + n)
}
但我想知道是否有一种更简单或更有效的方法来这样做。
1条答案
按热度按时间gfttwv5a1#
我个人会这样写:
使用一个可变列表,你可以避免任何删除/连接操作,代码也更容易理解。
如果需要,您仍然可以使用
.toList()
将其转换为不可变列表。