gpt4 book ai didi

scala - 展平 Scala 中的嵌套对象

转载 作者:行者123 更新时间:2023-12-02 16:03:33 30 4
gpt4 key购买 nike

给定一个如下所示的复杂对象:

case class Complex
(
id: Long,
name: String,
nested: Seq[Complex]
)

实际上,这可能会变成这样:

val stuff =
List(
Complex(1, "name1",
List(
Complex(2, "name2", List()),
Complex(3, "name3",
List(
Complex(4, "name4", List())
)
)
)
)
)

我需要将其变成一个复杂对象的平面列表,将所有子/孙子拉起来。

val flattened =
List(
Complex(1, "name1", List()),
Complex(2, "name2", List()),
Complex(3, "name3", List()),
Complex(4, "name4", List()),
)

您对我如何实现这一目标有任何线索/想法吗?

我尝试过的其他解决方案似乎只做简单的列表嵌套。我尝试过的事情:

这些似乎都产生了与我开始时相同的列表。

最佳答案

这里输入 Seq 扁平化的困难在于,需要删除结果列表中的嵌套引用。这可以通过使用 nested = 空列表复制原始对象并展平所有序列来完成:

def flatten(obj: Complex): Seq[Complex] = {
val unnested = obj.copy(nested = List())
Seq(unnested) ++ obj.nested.flatMap(flatten)
}

println(stuff.flatMap(flatten))

List(
Complex(1,name1,List()),
Complex(2,name2,List()),
Complex(3,name3,List()),
Complex(4,name4,List())
)

关于scala - 展平 Scala 中的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50412508/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com