我希望能更高效地完成以下任务:
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
我希望能更高效地完成以下任务:
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
对于字符串,您可以直接编写"abc" * 3
,这将通过StringOps
实现,并在幕后使用StringBuffer
。
对于字符,我认为您的解决方案相当合理,尽管char.toString * n
可能更清晰。您有任何理由怀疑List.fill
版本不足以满足您的需求吗?您可以编写自己的方法,该方法将使用StringBuffer
(类似于StringOps
上的*
),但我建议首先以清晰为目标,然后只有在具体证据表明这是您程序中的问题时才担心效率。
Long
上调用 toInt
方法(如果 Long
太大会溢出,但在这种情况下似乎不太可能有意义)。 - Travis Brown你可以简单地定义:
def repeatChar(char:Char, n: Int) = char.toString() * n
def repeatString(char:String, n: Int) = char * n
Stream
而不是List
,可能会稍微更有效率一些。 - Sascha Kolberg