Question Meilleure façon de répéter un personnage en C #


Quelle est la meilleure façon de générer une chaîne de \test en C #

J'apprends le C # et j'expérimente avec différentes manières de dire la même chose.

Tabs(uint t) est une fonction qui renvoie un string avec t quantité de \tde

Par exemple Tabs(3) résultats "\t\t\t"

Lequel de ces trois moyens de mise en œuvre Tabs(uint numTabs) est le meilleur?

Bien sûr, cela dépend de ce que «meilleur» signifie.

  1. La version LINQ est seulement deux lignes, ce qui est sympa. Mais les appels à Répéter et Aggréger consomment-ils inutilement du temps ou des ressources?

  2. le StringBuilder la version est très claire, mais est la StringBuilder classe en quelque sorte plus lent?

  3. le string La version est basique, ce qui signifie qu'elle est facile à comprendre.

  4. Cela n'a-t-il pas d'importance? Sont-ils tous égaux?

Ce sont toutes des questions pour m'aider à avoir 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; 
}

604
2018-01-04 21:56


origine


Réponses:


Et ça:

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

n est le nombre de fois que vous voulez répéter la chaîne.

Ou mieux:

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

1181
2018-01-04 22:00



Dans toutes les versions de .NET, vous pouvez répéter une chaîne ainsi:

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

Pour répéter un personnage, new String('\t', count) est votre meilleur pari. Voir la réponse par @CMS.


104
2018-04-06 10:38



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

Résultats

"abab"

Et

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

Résultats

"aa"

de...

Y at-il une fonction intégrée pour répéter la chaîne ou le caractère dans .net?


93
2018-03-13 16:16



La meilleure version est certainement d'utiliser la méthode intégrée:

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

Parmi les autres solutions, préférez le plus facile; seulement si cela s'avère trop lent, essayez d'obtenir une solution plus efficace.

Si vous utilisez un StringBuilder et connaître sa longueur résultante à l'avance, puis utiliser également un constructeur approprié, ceci est beaucoup plus efficace car cela signifie qu'une seule allocation de temps prend place, et pas de copie inutile des données. Non-sens: bien sûr, le code ci-dessus est plus efficace.


55
2018-01-04 22:01



Méthodes d'extension

public static string Repeat(this string s, int n)
{
    return new String(Enumerable.Range(0, n).SelectMany(x => s).ToArray());
}

public static string Repeat(this char c, int n)
{
    return new String(c, n);
}

41
2018-06-22 23:34



Pourquoi ne pas utiliser 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 pourriez alors écrire:

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

Notez qu'un test de performance de l'utilisation de la version stringbuilder pour des caractères simples au lieu de chaînes vous donne une pénalité de préformance majeure: Sur mon ordinateur, la différence de performance mesurée est de 1:20 entre: Debug.WriteLine ('-'. Repeat (1000000)) // version char et
Debug.WriteLine ("-". Repeat (1000000)) // version de chaîne


38
2018-01-27 12:28



Que dis-tu de ça:

//Repeats a character specified number of times
public static string Repeat(char character,int numberOfIterations)
{
    return "".PadLeft(numberOfIterations, character);
}

//Call the Repeat method
Console.WriteLine(Repeat('\t',40));

20
2018-06-20 13:50



Je sais que cette question a déjà cinq ans mais il existe un moyen simple de répéter une chaîne qui fonctionne même dans .Net 2.0.

Pour répéter une chaîne:

string repeated = new String('+', 3).Replace("+", "Hello, ");

Résultats

"Bonjour bonjour bonjour, "

Pour répéter une chaîne en tant que tableau:

// Two line version.
string repeated = new String('+', 3).Replace("+", "Hello,");
string[] repeatedArray = repeated.Split(',');

// One line version.
string[] repeatedArray = new String('+', 3).Replace("+", "Hello,").Split(',');

Résultats

{"Bonjour bonjour bonjour", ""}

Rester simple.


19
2017-12-03 02:42