gpt4 book ai didi

scala - Folds中处理角盒的功能方式

转载 作者:行者123 更新时间:2023-12-01 09:26:03 25 4
gpt4 key购买 nike

我有一个节点列表(字符串),我想将其转换为以下内容。

create X ({name:"A"}),({name:"B"}),({name:"B"}),({name:"C"}),({name:"D"}),({name:"F"})

使用折叠,我得到的所有内容最后都带有一个额外的“,”。我可以使用最终字符串上的子字符串来删除它。我想知道在 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"}),

最佳答案

解决方案 1

您可以使用 mkString 函数,该函数不会在末尾附加分隔符。

在这种情况下,您首先将每个元素映射到相应的字符串,然后使用 mkString 将 ',' 放在中间。

由于 "create X" 一开始是静态的,您可以将其添加到结果中。

val str = "create X " + nodes.map("({name:\"" + _ + "\"})").mkString(",")

解决方案 2

另一种理解方式:由于您只附加了一个“,”太多,因此您可以将其删除。

val str = nodes.foldLeft("create X ")((acc, x) => acc + "({name:\"" + x + "\"}),").init

init 只获取集合中的所有元素,除了最后一个。(字符串在这里被视为字符的集合)

因此,如果您的 nodes 中有元素,您将删除一个 ','。如果没有,您只会得到 "create X " 并因此删除可能不需要的空格。

nodes 为空时,解决方案 1 和 2 不等效。解决方案 1 将保留空白。

关于scala - Folds中处理角盒的功能方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618717/

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