kotlin - 如何使用特定策略拼合列表列表

标签 kotlin flatten

我得到了这个 list list :
[[1, 2, 3], [4, 5], [6]] = listOf(listOf(1,2,3), listOf(4,5), listOf(6))
如果我使用flatten方法,结果将是:
[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]

关于kotlin - 如何使用特定策略拼合列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56790957/

相关文章:

kotlin - 找不到 org.jetbrains.kotlin :kotlin-gradle-plugin:1. 4-M2

android - 无法在 Anko 中预览

php - 如何合并多个未知长度的平面数组,转置它们,然后形成一维数组?

ruby-on-rails - ruby 将多维数组转换为一个数组

python - 展平任意深度的字典

android - this@MainActivity 与 Kotlin 中的 MainActivity@this

kotlin - 如何从Corda流中的多个状态参与者那里收集签名?

android - 使用导航组件为每个 fragment 自定义工具栏

java - Maven:在不扩展依赖项的情况下使用 flatten 解析版本

angular - 使用 MatTreeFlatDataSource 时如何访问扁平化数据