scala,zip中的嵌套序列迭代

Nested sequence iteration in scala, zip

我有以下情况类

case class Outer(outerId: Integer, outerName: String, innerSeq:Seq[Inner]) 
case class Inner(innerName:String, innerAge: Integer, innerId: Integer)

我创建了以下实例

val innerSeq1 = Seq(Inner("in10",10, 0),Inner("in11",11, 1), Inner("in12",12, 2))
val innerSeq2 = Seq(Inner("in20",10, 0),Inner("in21",11, 1), Inner("in22",12, 2))
val outerSeq = Seq(Outer(1, "out1", innerSeq1), Outer(2, "out2", innerSeq2 ))

我的意图是像这样创建 3 个元素的三元组,我不确定我是否可以使用 Zip 或如何优雅地执行此操作(我知道一个地图然后一个地图可以进行迭代但我不清楚我将如何获得以下类型的输出)

我想要一个如下格式的三元组 (name of outer, name of inner, id of inner) Seq( (out1, in10, 0), (out1, in11, 1), (out1, in12, 2), (out2, in20, 0), (out2, in21, 1), (out2, in22, 2) ) 基本上我想在遍历 outersequence 时,想要形成三连音并得到这个扁平的三连音输出

原来我看错了你的问题。您真正想要的可以通过 flatMap 和内部 map 实现,如下所示:

outerSeq.flatMap(o => o.innerSeq.map(i => (o.outerName, i.innerName, i.innerId)))

如果您更喜欢for-comprehension,可能会更简单:

val res = for (o <- outerSeq;
               i <- o.innerSeq)
    yield (o.outerName, i.innerName, i.innerId)