我目前正在尝试使用Scala进行操作,试图习惯于函数式编程以及再次学习新语言(自上次以来已经有一段时间了)。

现在给出了一个字符串列表,如果我想将它们合并为一个长字符串(例如"scala", "is", "fun" => "scalaisfun"),我想出了一种方法来执行此操作,即执行foldRight并将串联应用于各个元素。公认更简单的另一种方法是调用mkString

我在github上检查了一下,但实际上找不到相应功能的源代码(对此会有所帮助),所以我不确定这些功能是如何实现的。从我的头开始,我认为mkString更加灵活,但感觉实现中可能存在foldRight。有什么道理吗?

否则,scaladocs会提到mkString针对每个相应元素调用toString。看到它们已经是字符串开头,在这种特殊情况下,这可能是mkString的负数。在性能,简单性/优雅性等方面,对这两种方法的利弊有何评论?

最佳答案

简单的答案:使用mkString
someString.toString returns相同的对象。
mkString用单个StringBuilder实现,并且仅创建1个新字符串。使用foldLeft,您将创建N-1新字符串。

您可以在StringBuilder中使用foldLeft,它将和mkString一样快,但是mkString较短:

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

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

10-12 17:47