我得到了这个清单清单:
.HasErrors
如果我使用的是[[1, 2, 3], [4, 5], [6]] = listOf(listOf(1,2,3), listOf(4,5), listOf(6))
方法,结果将是:
flatten
我想要的输出将是循环展平,采用每个列表的前N个元素进行展平...
因此,如果N = 1:
[1, 2, 3, 4, 5, 6] = listOf(1,2,3,4,5,6)
如果N = 2:
[1, 4, 6, 2, 5, 3]
如果N = 3:
[1, 2, 4, 5, 6, 3]
我想通过使用一些可变列表是可以实现的,但是它很丑陋,根本不起作用。
答案 0 :(得分:0)
我认为即使语法不是很好,这也可以解决问题。可能有一种方法可以优化以下解决方案,但我认为这是一个不错的起点。
val numberOfElements = 1
val numbers = listOf(listOf(1, 2, 3), listOf(4, 5), listOf(6))
val result = numbers.flatMap {
it.take(numberOfElements)
}.union(numbers.flatMap { if (it.size - numberOfElements > 0) {
it.takeLast(it.size - numberOfElements)
} else {
emptyList()
} })
println(result)
// numberOfElements = 1 --> [1, 4, 6, 2, 3, 5]
// numberOfElements = 2 --> [1, 2, 4, 5, 6, 3]
// numberOfElements = 3 --> [1, 2, 3, 4, 5, 6]
答案 1 :(得分:0)
val numbers = listOf(listOf(1, 2, 3), listOf(4, 5), listOf(6))
println(numbers.roundRobin(1)) // [1, 4, 6, 2, 5, 3]
println(numbers.roundRobin(2)) // [1, 2, 4, 5, 6, 3]
println(numbers.roundRobin(3)) // [1, 2, 3, 4, 5, 6]
fun <T> List<List<T>>.roundRobin(count: Int): List<T> {
return flatMap { it.chunked(count)
.mapIndexed { i, v -> i to v } }
.sortedBy { it.first }
.flatMap { it.second }
}
答案 2 :(得分:0)
您可以尝试一下。 这是一个递归函数。
var flattenedList : MutableList<Int> = ArrayList()
fun List<*>.flatten(){
for(i in this){
when(i){
is Int -> {
flattenedList.add(i)
}
is List<*> -> {
i.flatten()
}
}
}
}
fun main(){
var list = listOf(listOf(1,2,3), listOf(4,5,6), 7)
list.flatten()
println(flattenedList.toString())
}