Лучший способ повторить символ в C #

Это оператор присваивания в Паскале и часто используется в доказательствах и псевдокоде. Это то же, что и = на языках C-диалектов.

Исторически в документах по информатике использовались = для сравнений сравнений и для присвоений. Паскаль использовал :=, чтобы встать на жесткую левую стрелку. C пошел в другом направлении и вместо этого решил использовать операторы = и ==.

714
задан i3arnon 1 January 2014 в 02:49
поделиться

6 ответов

Что относительно этого:

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

, Где n количество раз, Вы хотите повторить строку.

Или лучше:

static string Tabs(int n)
{
    return new String('\t', n);
}
1351
ответ дан silkfire 1 January 2014 в 02:49
поделиться
  • 1
    Для общей исправности (и сокращают количество вещей, которые могут пойти не так, как надо), (и сделать мир лучшим местом), don' t http, если Вы не имеете к для файла, включает (и если Вы делаете, изменяете свой дизайн!) – James Butler 13 December 2011 в 14:36

Лучшая версия должна, конечно, использовать встроенный путь:

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

Из других решений, предпочтите самое легкое; только если это оказывается слишком медленным, боритесь за более эффективное решение.

, Если Вы используете StringBuilder и знаете его получающуюся длину заранее, тогда также, используйте соответствующего конструктора, это намного более эффективно, потому что это означает, что только одно трудоемкое выделение происходит, и никакое ненужное копирование данных. Ерунда: конечно, вышеупомянутый код более эффективен.

60
ответ дан Konrad Rudolph 1 January 2014 в 02:49
поделиться

Что относительно того, чтобы использовать дополнительный метод?

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

Вы могли затем записать:

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

Примечание, что тест производительности использования stringbuilder версии для простых символов вместо строк дает Вам главный проступок производительности: на моем компьютере разница в mesured производительности 1:20 между: Отладка. WriteLine ('-'.Repeat (1000000))//символьная версия и
Отладка. WriteLine (" - ".Repeat (1000000))//представляют версию

в виде строки
40
ответ дан larsmoa 1 January 2014 в 13:49
поделиться

Ответ действительно зависит от сложности, которую Вы хотите. Например, я хочу обрисовать в общих чертах все свои отступы с вертикальной панелью, таким образом, моя строка отступа определяется следующим образом:

return new string(Enumerable.Range(0, indentSize*indent).Select(
  n => n%4 == 0 ? '|' : ' ').ToArray());
4
ответ дан 22 November 2019 в 21:26
поделиться

Во всех версиях.NET можно повторить строку таким образом:

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

Повторить символ, new String('\t', count) Ваш лучший выбор. См. ответ @CMS.

120
ответ дан 22 November 2019 в 21:26
поделиться

Методы расширения:

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);
}
51
ответ дан 22 November 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: