gpt4 book ai didi

scala - 使用 mkString 与 foldRight 合并字符串列表

转载 作者:行者123 更新时间:2023-12-04 02:40:50 25 4
gpt4 key购买 nike

我目前正在尝试 Scala 中的东西,试图习惯函数式编程以及再次学习一门新语言(自上次以来已经有一段时间了)。

现在给出一个字符串列表,如果我想将它们合并成一个长字符串(例如 "scala", "is", "fun" => "scalaisfun" ),我想一种方法是做一个 foldRight并对各个元素应用连接。另一种方法,诚然要简单得多,就是调用mkString。 .

我在 github 上查了一下,但找不到相应函数的源代码(任何帮助将不胜感激),所以我不确定这些函数是如何实现的。从我的脑海中,我认为 mkString更灵活但感觉可能有foldRight在某处实现。这有什么道理吗?

否则,scaladocs 会提到 mkString调用toString对于每个相应的元素。看到它们已经是开始的字符串,这可能是 mkString 的一个负面因素。在这种特殊情况下。关于两种方法的优缺点,在性能、简单/优雅等方面有什么评论吗?

最佳答案

简单回答:使用 mkString .
someString.toString returns同一个对象。
mkString用单个 StringBuilder 实现它只创建 1 个新字符串。与 foldLeft您将创建 N-1新的字符串。

您可以使用 StringBuilderfoldLeft ,它将与 mkString 一样快, 但是 mkString更短:

strings.foldLeft(new StringBuilder){ (sb, s) => sb append s }.toString
strings.mkString // same result, at least the same speed

关于scala - 使用 mkString 与 foldRight 合并字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447681/

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