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

Scala中如何将序列组合映射后的嵌套结果扁平化处理?

解决Scala序列组合后的扁平化问题

嘿,这个需求其实很好实现,核心就是在你现有的zipped.map基础上,加上**扁平化(flatMap)**操作来拆解嵌套的序列。我给你两种直观的实现方式:

方法1:先映射再扁平化

先按你原来的逻辑得到包含嵌套序列的元组列表,再通过flatMap把每个嵌套序列里的元素逐个拆出来,和对应的外层值组合:

val seq1 = Seq(1,2,3,4,5)
val seq2 = Seq(Seq(1.0, 2.0, 3.0, 4.0, 5.0), Seq(1.0, 2.0, 3.0, 4.0, 5.0), Seq(1.0, 2.0, 3.0, 4.0, 5.0))
val seq3 = Seq("a", "b", "c")

// 先得到你原来的嵌套元组列表
val nestedTuples = (seq1, seq2, seq3).zipped.map((a, bSeq, c) => (a, bSeq, c))

// 扁平化处理:把每个元组里的bSeq拆成单个元素,和a、c重新组合
val flattenedResult = nestedTuples.flatMap { case (a, bSeq, c) =>
  bSeq.map(b => (a, Seq(b), c)) // 这里把单个b包装成Seq,匹配你要的输出格式
}

方法2:链式调用更简洁

你也可以把flatMap直接跟在zipped后面,省去中间变量,代码更紧凑:

val seq1 = Seq(1,2,3,4,5)
val seq2 = Seq(Seq(1.0, 2.0, 3.0, 4.0, 5.0), Seq(1.0, 2.0, 3.0, 4.0, 5.0), Seq(1.0, 2.0, 3.0, 4.0, 5.0))
val seq3 = Seq("a", "b", "c")

val flattenedResult = (seq1, seq2, seq3).zipped.flatMap((a, bSeq, c) =>
  bSeq.map(b => (a, Seq(b), c))
)

说明

  • 两种方法最终都会生成你想要的结果:List((1,List(1.0),"a"), (1,List(2.0),"a"), ..., (2,List(1.0),"b"), ...)
  • 如果你不需要把单个Double值包装成Seq,直接写成(a, b, c)就行,根据你的实际需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:56:56