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

1881voto

Christian C. Salvadó Punkte 763569

Wie wäre es damit:

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

Wo n ist die Anzahl der Wiederholungen der Zeichenkette, die Sie wünschen.

Oder besser:

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

226voto

Carter Medlin Punkte 11077
string.Concat(Enumerable.Repeat("ab", 2));

Rückgabe

"abab"

Und

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

Rückgabe

"aa"

von...

Gibt es eine eingebaute Funktion, um String oder Char in .net zu wiederholen?

151voto

Binoj Antony Punkte 15610

In allen Versionen von .NET können Sie eine Zeichenkette so wiederholen:

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

Um ein Zeichen zu wiederholen, new String('\t', count) ist Ihre beste Wahl. Siehe die Antwort von @CMS .

68voto

Konrad Rudolph Punkte 503837

Die beste Variante ist sicherlich die Verwendung der eingebauten Methode:

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

Von den anderen Lösungen ist die einfachste zu bevorzugen; erst wenn sich diese als zu langsam erweist, ist eine effizientere Lösung anzustreben.

Wenn Sie eine StringBuilder und die sich daraus ergebende Länge im Voraus kennen, dann auch einen entsprechenden Konstruktor verwenden, ist dies wesentlich effizienter, da nur eine zeitaufwändige Zuweisung stattfindet und kein unnötiges Kopieren von Daten. Unsinn: Natürlich ist der obige Code effizienter.

54voto

Rodrick Chapman Punkte 5327

Methoden der Erweiterung:

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

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