【问题标题】:Efficiently repeat a character/string n times in Scala在 Scala 中有效地重复一个字符/字符串 n 次
【发布时间】: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可能会更高效

标签: string scala char concatenation string-concatenation


【解决方案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 年前接受的答案有何不同(以任何有意义的方式)?
  • 这样更好。提高了投票率。
猜你喜欢
  • 1970-01-01
  • 2014-04-17
  • 2018-07-04
  • 2013-07-27
  • 1970-01-01
  • 2022-08-19
  • 2014-10-31
  • 2021-09-18
相关资源
最近更新 更多