在 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 次的主要内容,如果未能解决你的问题,请参考以下文章

你真的可以通过哈希有效地将相同的字符串分组吗?

在 C# 中有效地将字符串转换为字节数组(不使用编码)[重复]

(模式)匹配Scala中的字符串[重复]

如何更有效地计算 n 个字符串之间的不匹配分数?

有效地连接左侧的 N 个字符数组,C

如何有效地确定给定字符串中最长的单个字符回文?