Курс для начинающих: Конкатенация

Конкатенация: Что это такое?

Конкатенировать - это ставить что-то одно за другим, в программировании мы конкатенируем слова, строки вот так:

string maValeur = "Мое значение 1";
maValeur = maValeur + ", Мое значение 2";
maValeur = maValeur + ", Мое значение 3";

//Что дает:
//Мое значение 1,Мое значение 2,Мое значение 3

Так что это очень хорошо, когда у нас всего лишь небольшая конкатенация, но когда мы делаем цикл вот так:

string maValeur = null;
//Цикл из 100.000 конкатенаций
for(int i=0; i < 100000; i++)
{
    maValeur = maValeur + ",Мое значение " + i;
}

20 секунд и 768 миллисекунд! (00:20.768) ИЗБЕГАТЬ! Производительность совсем не оптимальна!

Почему?

Используя такой вид конкатенации со строками, каждый раз вы выделяете память для каждой добавленной строки, и если вы хотите изменить или манипулировать этой переменной, это действительно неэффективно! Microsoft, зная это, изобрела StringBuilder! String и Builder для построения строк.

StringBuilder

Объект StringBuilder используется очень просто:

StringBuilder maValeur = new StringBuilder();
//Цикл из 100.000 конкатенаций
for(int i=0; i < 1000000; i++)
{
    maValeur.Append("Мое значение ").Append(i).Append(",");
}

И бах! 6 миллисекунд! (00:00.006)

Как вы можете заметить, объект StringBuilder делает то же самое, но в 1000 раз быстрее и не занимает слишком много памяти! Достаточно использовать метод Append.

Кроме того, StringBuilder позволяет манипулировать строкой так, как вам нужно:

Метод Описание
StringBuilder.Append Конкатенирует элемент строки в конец уже содержащегося значения в StringBuilder
StringBuilder.AppendFormat Конкатенирует элемент строки в конец уже содержащегося значения в StringBuilder, добавляя возможность форматирования с индексами {x}
StringBuilder.Insert(start, "Значение") Добавляет элемент строки в определенное место уже содержащегося значения в StringBuilder
StringBuilder.Remove(start, длина) Удаляет определенное количество символов из уже содержащегося значения в StringBuilder с определенной позиции до заданной длины.

AppendFormat

Вы можете использовать StringBuilder так же, как вы используете string.Format(), вот так:

StringBuilder maValeur = new StringBuilder();
int maLigne = 1000;
for(int i=0; i < 1000; i++)
{
    maValeur.AppendFormat("Мое значение {0} - это значение строки {1},", i, maLigne);
    maLigne++;
}

Вы передаете на индекс 0 -> i и на индекс 1 -> maLigne

Insert

Чтобы точно вставить другую строку в StringBuilder, ничего проще:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("Моя собака гуляет в саду.");
maValeur.Insert(10,"и моя кошка ");
maValeur.Insert(33,"nt");

//Результат: Моя собака и моя кошка гуляют в саду.

Remove

Чтобы удалить символы, тоже очень просто:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("Моя собака гуляет в саду.");
maValeur.Insert(10,"и моя кошка ");
maValeur.Insert(33,"nt");
maValeur.Remove(35, 15);

//Результат: Моя собака и моя кошка гуляют.

Привыкайте использовать StringBuilder вместо конкатенаций строк, вы выиграете в производительности, поверьте мне!

Кроме того, это было одобрено Чаком Норрисом:

 

Aucun commentaire pour le moment.

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙