我有一个整数列表,需要在不丢失任何信息的情况下压缩为整数范围列表(必须有一种方法来反转此操作)。
目前我有:
val ints = listOf(8, 9, 45, 48, 49, 60, 61, 61, 62, 63, 3, 4, 5, 4, 5, 6)
val out = ints
.map { it..it }
.fold(mutableListOf(ints[0]..(ints[0] - 1)),
{ acc, next ->
val prev = acc.last()
if (prev.last + 1 == next.first) {
acc[acc.lastIndex] = prev.first..next.last
} else {
acc.add(next)
}
acc
}).toList()
正确产生:
[8..9, 45..45, 48..49, 60..61, 61..63, 3..5, 4..6]
但我的解决方案中有两个方面我不喜欢,
-
由于fold的初始值,它不适用于空列表
-
这对科特林来说太冗长了。我觉得这可以用更好的方式解决。
所以,问题是如何修复1和/或2?
提前感谢!