kotlin - 如何使用特定策略展平列表列表
问题描述
我得到了这个列表列表:
[[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]
推荐阅读
- python - 如何循环查询和页面结果?
- openstreetmap - 如何使用 Overpass API 获取海标?
- angular - 如何在不重新加载页面的情况下设置新的 cookie
- python - 从其他特定列的值注释绘图栏
- python - 使用另一个神经网络的输出构建神经网络,张量问题
- apostrophe-cms - 防止撇号工作流在每个页面上线时添加一个数字
- asp.net-core - 如何在用 JavaScript 填充的选项中从数据库中进行选择
- palantir-foundry - 如何在 palantir-slate 应用程序中使用折线图制作多条线
- google-app-engine - 如何在 Google App Engine 中创建版本号
- javascript - 如何使用lodash的_.get方法测试多条路径?