Эффективно повторите символ / строку n раз в Scala
Я хотел бы сделать следующее более эффективно:
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
2 ответов
для строк, вы можете просто написать "abc" * 3
, который работает через StringOps
и использует StringBuffer
за кулисами.
для персонажей я думаю, что ваше решение довольно разумно, хотя char.toString * n
- пожалуй, понятнее. У вас есть какие-либо основания подозревать List.fill
версия недостаточно эффективна для ваших нужд? Вы можете написать свой собственный метод, который будет использовать StringBuffer
(аналог *
on StringOps
), но я бы предложил сначала стремиться к ясности, а затем беспокоиться об эффективности только тогда, когда у вас есть конкретные доказательства, что это проблема в вашей программе.
Я знаю, что это старый вопрос, другое решение было бы то, что у меня ниже
def repeatChar(char:Char, n: Int) : String = {
var result = ""
for(_ <- 1 to n){
result += "" + char
}
result
}
результат от REPL repeatChar ('a', 2) = > res1: String = aa