[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.
Code Sculptor.