var list = new string[] { "Jozef", "Roman", "Palo" };
najjednoduchšie spravím :
"Jozef, Roman, Palo"
Mňa samozrejme hneď napadol foreach prístup. No ale viem že on sleduje .Net a číta si o ňom viac ako ja. Takže som vedel, že foreach nie je to čo má byť ako výsledok. Výsledok bol toto :
list.Aggregate((a, b) = a + ", " + b);
Čo je zaujímavý a rýchly spôsob ako rozumne niečo vypísať. Mňa ale hneď nejak začalo trápiť aké rýchle to je. Skúsil som štyri rôzne prístupy a tu sú výsledky
list.Aggregate((a, b) = a + ", " + b); | 3101,8578ms | |
string r = ""; f = false; foreach (string s in list) { if (f) r += ", "; else f = true; r += s; } | 5952,7529ms | |
string r = ""; f = false; foreach (string sc in list) { if (f) r2 += ", " + sc; else { r2 += sc; f = true; } } | 2974,5727ms | |
StringBuilder sb = new StringBuilder(); bool f = false; foreach (string sc in list) { if (f) sb.Append(", "); else f = true; sb.Append(sc); } | 2,3295ms |
Pokus som robil na liste s 20000 prvkami. Pričom každý prvok bol náhodný text dlhý od 5 do 14 znakov.
Neviem prečo, ale ja som mal domnienku, že v .Nete je za stringom vlastne StringBuilder. Ako vidno tak to nie je pravda a string je v tomto konkrétnom prípade až 1277 krát rýchlejší.
Čo ma tiež prekvapilo bol rozdiel medzi foreach stringovou metódou a Aggregate a ten je minimálny.Čakal som väčší rozdiel.
Na záver môžem povedať, že do debugovacích výpisov kľudne použijem Aggregate lebo je prehľadná a "spratná". Ale ak pôjde o skladanie väčšieho počtu reťazcov tak určite siahnem bo StringBuilder.
Žiadne komentáre:
Zverejnenie komentára