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
Author: TimY, 2015-07-26

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.

 81
Author: Travis Brown,
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

 0
Author: osleonard,
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