[Ww.Note] Male przyspieszacze czasu

Chcialbym sie podzielic malymi fragmentami kodu, bedacymi przspieszaczami czasu. Podobny tekst opublikowal Maciej Aniserowicz. Przykłady dotycza generowania obiektow string z roznego rodzaju powtorzeniami oraz prawie powtorzeniami.

1. Wygenerowanie tekstu ze zbioru napisow poprzedzielanych jakims delimiterem.

{
    var arr = new[] { "ala", "ma", "kota" };
    var s = String.Join(" ", arr);
    // s == "ala ma kota"
}
{
    var arr = new[] { "'a'", "'b'", "'c'" };
    var s = "Foo(" + String.Join(", ", arr) + ")";
    // s == "Foo('a', 'b', 'c')"
}
{
    var arr = new[] { "arg1", "arg2", "arg3" };
    var s = "Foo(" + String.Join(", ", arr) + ")";
    // s == "Foo(arg1, arg2, arg3)"
}

Metoda String.Join spelnia znakomicie swoja role.

2. Wygenerowanie tekstu gdzie mamy sekwencje takich samych wartosci, poprzedzielanych jakims inneym tekstem (przecinek, tabulator, nowa linia)

var s = String.Join("; ", Enumerable.Repeat(DateTime.Today.ToString("yyyy-MM-dd"), 5).ToArray());
// s == "2008-08-22; 2008-08-22; 2008-08-22; 2008-08-22; 2008-08-22"

Ponownie metoda String.Join, lecz tym razem tablice generujemy pomocnicza konstrukcja Enumerable.Repeat

3. Wygenerowanie tekstu gdzie mamy sekwencje wartosci, poprzedzielanych jakims inneym tekstem

var s = "Foo(" + String.Join(", ", Enumerable.Range(1, 4).Select(i => "arg" + i).ToArray()) + ")";
// s == "Foo(arg1, arg2, arg3, arg4)"

Ponownie metoda String.Join, lecz tym razem tablice generujemy pomocnicza konstrukcja Enumerable.Range razem z Select.

W starych czasach (pewnie w okolicach zdobywania Berlina) stosowalem StringBuildera i flagi LUB generowalem tablice za pomoca for i uzywalem String.Join. Oczywiscie nie zawsze takie konstrukcje sie nadaja, zwlaszcza ze w niektorych przypadkach performance (CPU, memory) moze cierpiec. Ale jesli uzywamy tego z umiarem czy w szablonach T4 (stad wzial sie pomysl na ten tekst), to jest wedlug mnie jak najbardziej na miejscu.

Opublikowane 22 sierpnia 08 01:14 przez Wojciech Gebczyk

Komentarze:

# dario-g said on sierpnia 22, 2008 14:11:

Od czasu istnienia 'extension methods' takie ulepszacze umieszczam właśnie w nich, przykład:

"a".Replicate()

# Wojciech Gebczyk said on sierpnia 22, 2008 14:26:

O! Faktycznie. Dla normalnego kodu to lepsze rozwiazanie bo krotsze :-)

W szablonach pewnie tez by zdalo egzamin przez "iclude". Ale to przy wiekszej ilosc iszablonow i takich konstrukcji. Enumerabe ma zalete ze jest z pudelka.

Dzieki za podpowiedz!

# dario-g said on sierpnia 22, 2008 16:25:

Oczywiście, aby miało jakiś sens powinno być:

"a".Replicate(5);

:))

# dotnetomaniak.pl said on kwietnia 29, 2009 10:23:

Dziękujemy za publikację - Trackback z dotnetomaniak.pl

Komentarze anonimowe wyłączone

About Wojciech Gebczyk

Code Sculptor.