Kurz pro začátečníky: Koncatenace

Konkatinace: Co to je?

Konkatinovat znamená spojit něco dohromady, v programování spojujeme slova, řetězce takto:

string maValeur = "Moje Hodnota 1";
maValeur = maValeur + ", Moje Hodnota 2";
maValeur = maValeur + ", Moje Hodnota 3";

//Což dává:
//Moje Hodnota 1,Moje Hodnota 2,Moje Hodnota 3

Takže je to velmi dobré, když máme jen malé spojení, ale když děláme smyčku takto:

string maValeur = null;
//Smyčka 100.000 spojení
for(int i=0; i < 100000; i++)
{
    maValeur = maValeur + ",Moje Hodnota " + i;
}

20 sekund a 768 milisekund! (00:20.768) VYHNOUT SE TOMU! Výkon není vůbec optimální!

Proč?

Používáním tohoto druhu spojení s řetězci, pokaždé alokujete paměť pro každý přidaný řetězec, a navíc, pokud chcete tuto proměnnou upravit nebo manipulovat s ní, není to vůbec výkonné! Microsoft to věděl a vynalezl StringBuilder! String a Builder pro konstrukci řetězců.

StringBuilder

Objekt StringBuilder se používá velmi jednoduše:

StringBuilder maValeur = new StringBuilder();
//Smyčka 100.000 spojení
for(int i=0; i < 1000000; i++)
{
    maValeur.Append("Moje Hodnota ").Append(i).Append(",");
}

A Paf! 6 milisekund! (00:00.006)

Jak si můžete všimnout, objekt StringBuilder dělá to samé, ale 1000krát rychleji a bez přílišné spotřeby paměti! Stačí použít metodu Append.

Kromě toho StringBuilder umožňuje manipulovat s řetězcem, jak chcete:

Metoda Popis
StringBuilder.Append Spojuje prvek řetězce na konec hodnoty již obsažené v StringBuilderu
StringBuilder.AppendFormat Spojuje prvek řetězce na konec hodnoty již obsažené v StringBuilderu, ale s možností formátování pomocí indexů {x}
StringBuilder.Insert(start, "Hodnota") Přidává prvek řetězce na přesnou pozici hodnoty již obsažené v StringBuilderu
StringBuilder.Remove(start, délka) Odstraňuje určité množství znaků z hodnoty již obsažené v StringBuilderu z přesné pozice na určitou délku.

AppendFormat

Můžete používat StringBuilder stejným způsobem, jakým používáte string.Format(), takto:

StringBuilder maValeur = new StringBuilder();
int maLigne = 1000;
for(int i=0; i < 1000; i++)
{
    maValeur.AppendFormat("Moje Hodnota {0} je hodnota řádku {1},", i, maLigne);
    maLigne++;
}

Předáváte na index 0 -> i a na index 1 -> maLigne

Insert

Abychom přesně vložili jiný řetězec do StringBuilderu, není to nic složitého:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("Můj pes se prochází po zahradě.");
maValeur.Insert(10,"a moje kočka ");
maValeur.Insert(33,"nt");

//Výsledek: Můj pes a moje kočka se procházejí po zahradě.

Remove

Abychom odstranili znaky, stále velmi jednoduché:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("Můj pes se prochází po zahradě.");
maValeur.Insert(10,"a moje kočka ");
maValeur.Insert(33,"nt");
maValeur.Remove(35, 15);

//Výsledek: Můj pes a moje kočka se procházejí.

Zvykněte si používat StringBuilder spíše než spojení řetězců, získáte tím výkon, věřte mi!

Kromě toho to bylo schváleno Chuckem Norrisem:

 

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 🗙