I need to transform

List("home", "mens", "clothing", "jackets")



This is what I have so far:

val nodes = Array("home", "mens", "clothing", "jackets")
val (rootNode, otherNodes) = nodes.splitAt(1)
val tree = otherNodes.foldLeft(rootNode) { (list, token) =>
    list :+ (list.last + "/" + token)

What do you think? any obvious problems?


2 Answers 2


It looks like you need a variation of the prefix sum algorithm applied to your list. In Scala this can be accomplished with scan:

val xs = List("home", "mens", "clothing", "jackets")
xs.scan("")(_ + "/" + _).tail
  • \$\begingroup\$ Very nice! I didn't know about scan \$\endgroup\$
    – user78169
    Commented Mar 17, 2016 at 3:44

I think you don't need to split the nodes to run this correctly..


val tree = (nodes.foldLeft("") { (list, token) => 
    list :+ (list.last + "/" + token)

I could also imagine extracting the current binary operator into a separate function.

Aside from that this is really nice and clean


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.