我目前正在尝试使用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/