You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin(JVM)保留二维索引的二维列表扁平化实现方法

Kotlin 扁平化二维列表并保留二维索引的惯用写法

要实现保留二维索引的扁平化操作,直接组合Kotlin标准库的withIndex()和flatMap()就能完成,完全符合语言习惯:

方法一:使用标准三元组(Triple)

val twoDList = listOf(
    listOf("a", "b", "c"),
    listOf("d", "e"),
    listOf("f", "g", "h", "i")
)

// 扁平化并保留二维索引
val flattened = twoDList.withIndex()
    .flatMap { (rowIdx, rowElements) ->
        rowElements.withIndex()
            .map { (colIdx, element) ->
                Triple(rowIdx, colIdx, element)
            }
    }

逻辑说明:

  • 外层通过withIndex()为每一行绑定行索引
  • 用flatMap替代普通map,直接将每行的处理结果合并为单层列表
  • 内层再通过withIndex()为每个元素绑定列索引,最后用Triple打包行索引、列索引和元素值

方法二:自定义数据类(更具语义化)

如果觉得Triple的可读性不足,可以自定义数据类封装索引和元素,让代码意图更清晰:

// 自定义数据类,明确语义
data class Indexed2DElement<T>(
    val row: Int,
    val column: Int,
    val value: T
)

val twoDList = listOf(
    listOf("a", "b", "c"),
    listOf("d", "e"),
    listOf("f", "g", "h", "i")
)

val flattened = twoDList.withIndex()
    .flatMap { (rowIdx, rowElements) ->
        rowElements.withIndex()
            .map { (colIdx, element) ->
                Indexed2DElement(rowIdx, colIdx, element)
            }
    }

这种写法在复杂业务场景下更易维护,从数据类的名称和字段名就能直接理解每个值的含义。

内容的提问来源于stack exchange,提问作者Zabuzard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:35:20