首页 > 解决方案 > 如何使用特定策略展平列表列表

问题描述

我得到了这个列表列表:

[[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]

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

标签: kotlinflatten

解决方案


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

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]


推荐阅读