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

如何将嵌套Kotlin Map转换为带点分隔键的字符串数组

实现方法

可以通过递归遍历嵌套Map的方式来实现,核心逻辑是跟踪当前键的路径,遇到嵌套Map时拼接路径前缀,遇到普通值时生成指定格式的字符串。

具体代码实现

fun flattenMap(map: Map<String, Any>, prefix: String = ""): List<String> {
    val result = mutableListOf<String>()
    for ((key, value) in map) {
        val currentKey = if (prefix.isEmpty()) key else "$prefix.$key"
        when (value) {
            is Map<*, *> -> {
                @Suppress("UNCHECKED_CAST")
                result.addAll(flattenMap(value as Map<String, Any>, currentKey))
            }
            else -> result.add("$currentKey=$value")
        }
    }
    return result
}

// 测试示例
fun main() {
    val map = mapOf(
        "A" to "1",
        "B" to mapOf(
            "C" to "2"
        )
    )
    val flattened = flattenMap(map)
    println(flattened) // 输出: [A=1, B.C=2]
}

代码说明

  • 递归函数flattenMap接收两个参数:待遍历的Map和当前的键路径前缀(默认空字符串)。
  • 遍历Map的每个键值对:
    • 拼接当前键的完整路径:如果前缀为空,直接用当前key;否则用前缀.key的格式。
    • 如果值是嵌套的Map,就递归调用函数,传入该子Map和新的路径前缀,将返回的结果加入列表。
    • 如果值是普通类型(比如String),直接生成路径=值格式的字符串加入结果列表。
  • 最终返回整理好的字符串列表。

扩展说明

如果嵌套Map的层级更多(比如"B" to mapOf("C" to mapOf("D" to "3"))),这个方法也能正确处理,会生成"B.C.D=3"这样的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:34:54