Répéter efficacement un caractère/chaîne n fois dans Scala

je voudrais faire la suite de manière plus efficace:

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
39
demandé sur TimY 2015-07-26 15:46:17

2 réponses

Pour les chaînes, vous pouvez simplement écrire "abc" * 3, qui fonctionne à l'aide de StringOps et utilise un StringBuffer derrière les coulisses.

pour les caractères je pense que votre solution est assez raisonnable, bien que char.toString * n est sans doute plus clair. Avez-vous des raisons de croire que l' List.fill version n'est pas assez efficace pour vos besoins? Vous pouvez écrire votre propre méthode qui utiliserait un StringBuffer (similaire à *StringOps), mais je suggère de viser d'abord la clarté et ensuite l'inquiétude à propos de l'efficacité que lorsque vous avez des preuves concrètes que c'est un problème dans votre programme.

81
répondu Travis Brown 2018-01-18 13:25:34

je sais que c'est une vieille question, une autre solution serait ce que j'ai ci-dessous

def repeatChar(char:Char, n: Int) : String = {
    var result = ""
    for(_ <- 1 to n){
      result += "" + char
    }
    result

}

résultat de REPL repeatChar ('a', 2) = > res1: String = aa

0
répondu osleonard 2018-02-19 13:36:00