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

Scala中遍历嵌套列表问题:生成带递增别名的元素序列

解决方案

你的问题出在把每个子列表的元素直接拼接成了单个字符串,而没有为子列表中的每个元素单独生成带别名的条目。可以通过扁平化遍历嵌套列表的方式解决,同时用更符合Scala风格的函数式写法替代可变变量:

val condkeys = List(List("SITE"), List("SITEID"), List("NAME", "SITEID"))

// 用zipWithIndex获取每个子列表的索引,flatMap扁平化所有生成的条目
val allcondkeys = condkeys.zipWithIndex.flatMap { case (subList, index) =>
  val alias = ('b' + index).toChar
  // 为子列表中的每个元素生成带别名的字符串
  subList.map(element => s"$alias.$element")
}

println(allcondkeys)
// 输出: List(b.SITE, c.SITEID, d.NAME, d.SITEID)
println(allcondkeys.size)
// 输出: 4

关键修改点:

  • 用zipWithIndex关联每个子列表和它的索引,避免手动遍历0到2的硬编码
  • 用flatMap替代普通的map:map会保留子列表的结构,而flatMap会把所有子列表生成的元素合并成一个扁平序列
  • 对每个子列表中的单个元素生成带别名的字符串,而不是把整个子列表拼接成一个字符串

如果你坚持要保留原来的循环写法(不推荐,因为Scala更鼓励不可变编程),可以修改为:

val condkeys = List(List("SITE"), List("SITEID"), List("NAME", "SITEID"))

var allcondkeys: Seq[String] = Seq.empty

for (index <- 0 until condkeys.size) {
  val alias = ('b' + index).toChar
  // 遍历当前子列表的每个元素,逐个添加到allcondkeys
  condkeys(index).foreach { element =>
    allcondkeys = allcondkeys :+ s"$alias.$element"
  }
}

println(allcondkeys)
// 输出: List(b.SITE, c.SITEID, d.NAME, d.SITEID)

内容的提问来源于stack exchange,提问作者Vikrant Singh Rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:41:01