Толик Панков
hex_laden
............ .................. ................
December 2025
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Толик Панков [userpic]
C#, сгенерировать строку нужной длины из одного символа.

Преамбула


Продолжаем задачки по генерации всяких паттернов. Недавно мы генерировали массив, заполненный одним значением (копия). Теперь будем генерировать строку из одного символа, но нужной длины. Строку из случайных символов мы уже делали

Теперь будем делать строку-паттерн из одного заранее заданного символа.

Заведем три переменных:

int strlen = 100000; // длинна строки
string symbol = "a"; // символ заполнения
string Result = ""; // результирующая строка



"В лоб", с использованием стандартной конкатенации строк


Т.е. в цикле for, используя конструкцию s=s+"a":

for (int i = 0; i < strlen; i++)
{
    Result = Result + symbol;
}


С использованием StringBuilder


StringBuilder sb = new StringBuilder(strlen);
for (int i = 0; i < strlen; i++)
{
    sb.Append(symbol);
}

Result = sb.ToString();


Тесты


For + standart string concatenation:00:00:05.7493288
Test For + StringBuilder.Append:00:00:00.0030001


Даже на 10000 символов видна разница, здесь показана на 100000, а 500000 для for я вообще не дождался.

Примечание: Тут мы делали строку заданной длины из одного паттерна, поэтому StringBuilder был уместен, т.к. он напрямую работает с памятью, и не использует механизм .NET, которому нужно строку скопировать, а потом добавить символ. См. ссылку ниже.

Эффективная конкатенация строк в .NET

Тестовый пример на GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2021/01/17/c-sgenerirovat-stroku-nuzhnoj-dliny-iz-odnogo-simvola/

Tags: ,