在Scala中,如何组合同一List的元素序列?

jra*_*oyo 2 functional-programming scala

如何转换此列表:

List("a", "b", "c", "d")
Run Code Online (Sandbox Code Playgroud)

进入包含以下元素的列表

List(List("a"), List("a", "b"), List("a", "b", "c"), List("a", "b", "c", "d"))
Run Code Online (Sandbox Code Playgroud)

我的要求是从包含目录名称的列表构建相对目录路径的列表,其中a是根目录,并且baie 的叶子a/b

例:

"fruit", "tropical", "mango"
Run Code Online (Sandbox Code Playgroud)

转换为:

"fruit", "fruit/tropical", "fruit/tropical/mango"
Run Code Online (Sandbox Code Playgroud)

编辑:我可以迭代地执行此操作,但我正在寻找功能性解决方案.

ser*_*jja 8

你可以inits用来达到你想要的类似的东西:

val xs = List("a", "b", "c", "d")
val ys = xs.inits.toList.reverse.drop(1)
Run Code Online (Sandbox Code Playgroud)

说明:

xs.inits.toList 会给你这个结果:

List(List(a, b, c, d), List(a, b, c), List(a, b), List(a), List())
Run Code Online (Sandbox Code Playgroud)

现在你可以反转它并删除第一个元素并获得:

List(List(a), List(a, b), List(a, b, c), List(a, b, c, d))
Run Code Online (Sandbox Code Playgroud)

然后,只需String得到一个结果:

ys.map(_.mkString("/")) // results in List(a, a/b, a/b/c, a/b/c/d)
Run Code Online (Sandbox Code Playgroud)