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
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.
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