1013 votes

Meilleur moyen de répéter un caractère dans c#

Ce que c'est le meilleur moyen pour générer une chaîne de \t's en C#

Je suis en train d'apprendre le C# et d'expérimenter avec différentes façons de dire la même chose.

Tabs(uint t) est une fonction qui retourne un string avec t montant \ts'

Par exemple Tabs(3) retours "\t\t\t"

Laquelle de ces trois modalités de mise en oeuvre Tabs(uint numTabs) est le meilleur?

Bien sûr, cela dépend de ce que le "meilleur" signifie.

  1. Le LINQ version est à seulement deux lignes, ce qui est agréable. Mais les appels à Répétition et d'Agrégation inutilement du temps/consommer beaucoup de ressources?

  2. L' StringBuilder version est très clair, mais est l' StringBuilder de la classe d'une certaine manière plus lente?

  3. L' string version de base, ce qui signifie qu'il est facile à comprendre.

  4. N'est-ce pas? Sont-ils tous égaux?

Ce sont toutes les questions pour m'aider à obtenir une meilleure idée de C#.

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat("\t", (int) numTabs);
    return (numTabs > 0) ? tabs.Aggregate((sum, next) => sum + next) : ""; 
}  

private string Tabs(uint numTabs)
{
    StringBuilder sb = new StringBuilder();
    for (uint i = 0; i < numTabs; i++)
        sb.Append("\t");

    return sb.ToString();
}  

private string Tabs(uint numTabs)
{
    string output = "";
    for (uint i = 0; i < numTabs; i++)
    {
        output += '\t';
    }
    return output; 
}

1861voto

CMS Points 315406

Ce:

string tabs = new String('\t', n);

Ou mieux:

static string Tabs(int n)
{
    return new String('\t', n);
}

225voto

Carter Points 3877
string.Concat(Enumerable.Repeat("ab", 2));

Retourne

"abab"

Et

string.Concat(Enumerable.Repeat("a", 2));

Retourne

"aa"

à partir de...

Est-il intégré dans la fonction de répétition de chaîne ou de char .net?

148voto

Binoj Antony Points 7519

Ainsi dans toutes les version de .NET pour répéter une chaîne, vous pouvez toujours le faire

public static string Repeat(string value, int count)
{
  return new StringBuilder().Insert(0, value, count).ToString();
}

pour les caractères @CMS new String('\t', n) est votre meilleur pari.

67voto

Konrad Rudolph Points 231505

La meilleure version est certainement l'utilisation de la builtin façon:

string Tabs(int len) { return new string('\t', len); }

De l'autre des solutions, préférez le plus simple; seulement si cela s'avère trop lent, d'œuvrer pour une solution plus efficace.

Si vous utilisez un StringBuilder et de savoir sa longueur résultante à l'avance, puis également utiliser un constructeur approprié, c'est beaucoup plus efficace, car cela signifie que seulement un temps d'allocation a lieu, et ne nécessite pas de copie de données. Non-sens: bien sûr, le code ci-dessus est plus efficace.

43voto

Ronnie Points 1863

Que penser de l'utilisation de la méthode d'extension?


public static class StringExtensions
{
   public static string Repeat(this char chatToRepeat, int repeat) {

       return new string(chatToRepeat,repeat);
   }
   public  static string Repeat(this string stringToRepeat,int repeat)
   {
       var builder = new StringBuilder(repeat*stringToRepeat.Length);
       for (int i = 0; i < repeat; i++) {
           builder.Append(stringToRepeat);
       }
       return builder.ToString();
   }
}

Vous pouvez alors écrire :

Debug.WriteLine('-'.Repeat(100)); // For Chars  
Debug.WriteLine("Hello".Repeat(100)); // For Strings

Note qu'un test de performance de l'aide de la classe stringbuilder version pour de simples caractères à la place des cordes donne une performance de pénalité : sur mon ordinateur de la différence de performances mesurées est de 1:20 entre: Debug.WriteLine('-'.Répéter(1000000)) //char de la version et de l'
Debug.WriteLine("-".Répéter(1000000)) //la chaîne de version

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X