在 Scala 中有效地重复一个字符/字符串 n 次
Posted
技术标签:
【中文标题】在 Scala 中有效地重复一个字符/字符串 n 次【英文标题】:Efficiently repeat a character/string n times in Scala 【发布时间】:2015-10-16 16:40:18 【问题描述】:我想更有效地做以下事情:
def repeatChar(char:Char, n: Int) = List.fill(n)(char).mkString
def repeatString(char:String, n: Int) = List.fill(n)(char).mkString
repeatChar('a',3) // res0: String = aaa
repeatString("abc",3) // res0: String = abcabcabc
【问题讨论】:
如果你使用Stream
而不是List
可能会更高效
【参考方案1】:
对于字符串,您可以只写"abc" * 3
,它通过StringOps
工作并在后台使用StringBuffer
。
对于角色,我认为您的解决方案非常合理,尽管char.toString * n
可以说更清晰。您是否有任何理由怀疑List.fill
版本的效率不足以满足您的需求?您可以编写自己的方法来使用StringBuffer
(类似于StringOps
上的*
),但我建议您首先明确目标,然后仅在您有具体证据表明这是您的问题时才担心效率程序。
【讨论】:
谢谢特拉维斯。这更多是出于学术兴趣,并且正如您所建议的那样,尽可能提高清晰度,而不是提高性能。我只是想确保从一开始就采用最佳做法。 @TimY 这是有道理的——我希望更多的人会在性能以外的情况下使用“效率”! 不确定这里的合理性是如何确定的:这个答案是否依赖于针对其他选项的任何基准测试,例如操作纯 Java 字符串或其他任何东西,或者您的意思是这是在斯卡拉? @MoustafaMahmoud 为什么不试试呢? 您可以随时在Long
上调用toInt
(如果Long
太大,则会溢出,但无论如何,这似乎不太可能是一个有意义的案例)。【参考方案2】:
你可以简单地定义:
def repeatChar(char:Char, n: Int) = char.toString() * n
def repeatString(char:String, n: Int) = char * n
【讨论】:
.repeat(n) 不是 String 中的方法。 我的坏。当我在 Scala 中编写 gatling 模拟来测试 java 应用程序时,我还包含了 java.lang 包。我没有意识到我正在使用 java.lang.String 作为重复方法。 现在修复了答案。 这与 6 年前接受的答案有何不同(以任何有意义的方式)? 这样更好。提高了投票率。以上是关于在 Scala 中有效地重复一个字符/字符串 n 次的主要内容,如果未能解决你的问题,请参考以下文章