Repetir eficientemente un carácter / cadena n veces en Scala
Me gustaría hacer lo siguiente de manera más eficiente:
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 answers
Para las cadenas, simplemente puede escribir "abc" * 3
, que funciona a través de StringOps
y utiliza un StringBuffer
detrás de las escenas.
Para los personajes creo que su solución es bastante razonable, aunque char.toString * n
es posiblemente más clara. ¿Tiene alguna razón para sospechar que la versión List.fill
no es lo suficientemente eficiente para sus necesidades? Podría escribir su propio método que usaría un StringBuffer
(similar a *
en StringOps
), pero sugeriría apuntar primero a la claridad y luego preocuparse por la eficiencia solo cuando tenga evidencia concreta de que eso es un problema en su programa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-18 13:25:34
Sé que esta es una vieja pregunta, otra solución sería lo que tengo a continuación
def repeatChar(char:Char, n: Int) : String = {
var result = ""
for(_ <- 1 to n){
result += "" + char
}
result
}
Resultado de REPL repeatChar ('a', 2) => res1: String = aa
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-19 13:36:00