1026 Stimmen

Beste Möglichkeit, ein Zeichen in C# zu wiederholen

Wie kann man am besten eine Zeichenkette aus \t 's in C#

Ich lerne gerade C# und experimentiere mit verschiedenen Möglichkeiten, das Gleiche zu sagen.

Tabs(uint t) ist eine Funktion, die eine string con t Betrag von \t 's

Zum Beispiel Tabs(3) gibt zurück. "\t\t\t"

Welche dieser drei Möglichkeiten der Umsetzung Tabs(uint numTabs) am besten ist?

Das hängt natürlich davon ab, was "am besten" bedeutet.

  1. Die LINQ-Version besteht nur aus zwei Zeilen, was sehr angenehm ist. Aber sind die Aufrufe von Repeat und Aggregate unnötig zeit- und ressourcenaufwändig?

  2. Le site StringBuilder Version ist sehr klar, aber ist die StringBuilder Klasse irgendwie langsamer?

  3. Le site string Version ist einfach, d. h. sie ist leicht zu verstehen.

  4. Spielt das überhaupt keine Rolle? Sind sie alle gleich?

Dies sind alles Fragen, die mir helfen sollen, ein besseres Gefühl für C# zu bekommen.

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; 
}

43voto

Ronnie Punkte 4849

Wie sieht es mit der Anwendung der Erweiterungsmethode aus?


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();
   }
}

Sie könnten dann schreiben:

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

Beachten Sie, dass ein Leistungstest, bei dem die Stringbuilder-Version für einfache Zeichen anstelle von Zeichenketten verwendet wird, zu einer erheblichen Leistungseinbuße führt: Auf meinem Computer beträgt der Unterschied in der gemessenen Leistung 1:20 zwischen: Debug.WriteLine('-'.Repeat(1000000)) //Zeichenversion und
Debug.WriteLine("-".Repeat(1000000)) //Zeichenfolgenversion

26voto

Amin Punkte 294

Nehmen wir an, Sie wollen '' wiederholen \t ' n-mal, können Sie verwenden;

String.Empty.PadRight(n,'\t')

25voto

ChaimG Punkte 5736

Ich weiß, dass diese Frage bereits fünf Jahre alt ist, aber es gibt eine einfache Möglichkeit, eine Zeichenfolge zu wiederholen, die sogar in .Net 2.0 funktioniert.

Um eine Zeichenfolge zu wiederholen:

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

Rückgabe

"Hallo, Hallo, Hallo,"

Um eine Zeichenkette als Array zu wiederholen:

// 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ückgabe

{"Hallo", "Hallo", "Hallo", ""}

Halten Sie es einfach.

19voto

Ray Punkte 178277

Ihr erstes Beispiel, bei dem Enumerable.Repeat :

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

kann kompakter umgeschrieben werden mit String.Concat :

private string Tabs(uint numTabs)
{       
    return String.Concat(Enumerable.Repeat("\t", (int) numTabs));
}

15voto

bradgonesurfing Punkte 29536

Verwendung von String.Concat y Enumerable.Repeat was weniger teuer sein wird als die Verwendung String.Join

public static Repeat(this String pattern, int count)
{
    return String.Concat(Enumerable.Repeat(pattern, count));
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X