Kotlin 如何使用特定策略展平列表列表

Kotlin 如何使用特定策略展平列表列表,kotlin,flatten,Kotlin,Flatten,我得到了这个列表: [[1,2,3]、[4,5]、[6]]=listOf(listOf(1,2,3)、listOf(4,5)、listOf(6)) 如果我使用展平方法,结果将是: [1,2,3,4,5,6]=listOf(1,2,3,4,5,6) 我想要的输出是一种循环展平,取每个列表的前N个元素进行展平 因此,如果N=1: [1,4,6,2,5,3] 如果N=2: [1,2,4,5,6,3] 如果N=3: [1,2,3,4,5,6] 我想通过使用一些可变列表是可以实现的,但这会非常难看,而且根

我得到了这个列表:

[[1,2,3]、[4,5]、[6]]=listOf(listOf(1,2,3)、listOf(4,5)、listOf(6))

如果我使用
展平
方法,结果将是:

[1,2,3,4,5,6]=listOf(1,2,3,4,5,6)

我想要的输出是一种循环展平,取每个列表的前N个元素进行展平

因此,如果N=1:
[1,4,6,2,5,3]

如果N=2:
[1,2,4,5,6,3]

如果N=3:
[1,2,3,4,5,6]


我想通过使用一些可变列表是可以实现的,但这会非常难看,而且根本不起作用。

在我看来,这应该可以做到,即使语法不是很好。可能有一种方法可以优化以下解决方案,但我认为这是一个很好的起点

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]

val number=listOf(listOf(1,2,3)、listOf(4,5)、listOf(6))
println(number.roundRobin(1))/[1,4,6,2,5,3]
println(number.roundRobin(2))/[1,2,4,5,6,3]
println(number.roundRobin(3))/[1,2,3,4,5,6]
有趣的列表。循环(计数:Int):列表{
返回flatMap{it.chunked(计数)
.mapIndexed{i,v->i到v}
.sortedBy{it.first}
.flatMap{it.second}
}
您可以试试这个。 它是一个递归函数

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())
}
var flattedList:MutableList=ArrayList()
有趣的列表{
因为(我在这里){
何时(i){
是Int->{
展平列表。添加(i)
}
是列表->{
i、 展平()
}
}
}
}
主要内容(){
var list=listOf(listOf(1,2,3),listOf(4,5,6),7)
list.flatte()
println(flattedList.toString())
}

我认为zip()操作是您所需要的,但您需要将其与手动展平相结合
zip
是不够的。如果N=1,并且所有列表的大小相同,则它可以正常工作。但在我们的例子中,它将返回
[1,4,6]
。。。
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())
}