Sou*_*nta 3 functional-programming scala fold
我有一个节点列表(String),我想将其转换为以下内容.
create X ({name:"A"}),({name:"B"}),({name:"B"}),({name:"C"}),({name:"D"}),({name:"F"})
Run Code Online (Sandbox Code Playgroud)
使用折叠我最后得到一些额外的",".我可以使用最终String上的子字符串删除它.我想知道在Scala中是否有更好/更实用的方法吗?
val nodes = List("A", "B", "B", "C", "D", "F")
val str = nodes.map( x => "({name:\"" + x + "\"}),").foldLeft("create X ")( (acc, curr) => acc + curr )
println(str)
//create X ({name:"A"}),({name:"B"}),({name:"B"}),({name:"C"}),({name:"D"}),({name:"F"}),
Run Code Online (Sandbox Code Playgroud)
解决方案1
您可以使用该mkString
功能,该功能不会在末尾附加分隔符.
在这种情况下,您首先将每个元素映射到相应的String,然后使用mkString将','放在中间.
由于"create X"
在开始时它是静态的,你可以将它添加到结果中.
val str = "create X " + nodes.map("({name:\"" + _ + "\"})").mkString(",")
Run Code Online (Sandbox Code Playgroud)
解决方案2
另一种看待这种情况的方法:由于你只追加一个','太多,你可以删除它.
val str = nodes.foldLeft("create X ")((acc, x) => acc + "({name:\"" + x + "\"}),").init
Run Code Online (Sandbox Code Playgroud)
init
只取一个集合中的所有元素,除了最后一个.(字符串在这里被视为字符集合)
因此,如果您的元素中存在元素nodes
,则会删除",".如果没有,您只能获得"create X "
并因此移除可能不需要的空白区域.
当nodes
空的时,解决方案1和2不等效.解决方案1将保留空白区域.
归档时间: |
|
查看次数: |
123 次 |
最近记录: |