web-dev-qa-db-fra.com

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

Je voudrais faire ce qui suit plus efficacement:

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
50
TimY

Pour les chaînes, vous pouvez simplement écrire "abc" * 3, qui fonctionne via StringOps et utilise un StringBuffer dans les coulisses.

Pour les personnages, je pense que votre solution est assez raisonnable, bien que char.toString * n est sans doute plus clair. Avez-vous des raisons de soupçonner le List.fill la version n'est pas assez efficace pour vos besoins? Vous pouvez écrire votre propre méthode qui utiliserait un StringBuffer (similaire à * on StringOps), mais je suggérerais de viser d'abord la clarté, puis de ne m'inquiéter de l'efficacité que lorsque vous avez des preuves concrètes que c'est un problème dans votre programme.

100
Travis Brown