using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace dictionary_vs_switch
{
class Program
{
static void Main()
{
char[] fromArr = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (char)i).ToArray();
char[] iterArr = new char[10000];
Random r = new Random();
for (int i = 0; i < iterArr.Length; i++)
{
iterArr[i] = fromArr[r.Next(fromArr.Length)];
}
var result1 = new StringBuilder(iterArr.Length);
var result2 = new StringBuilder(iterArr.Length);
Stopwatch s1 = new Stopwatch();
Stopwatch s2 = new Stopwatch();
Dictionary<char, char> d = new Dictionary<char, char>
{
{'a', 'а'},
{'b', 'б'},
{'c', 'ц'},
{'d', 'д'},
{'e', 'е'},
{'f', 'ф'},
{'g', 'г'},
{'h', 'ш'},
{'i', 'и'},
{'j', 'й'},
{'k', 'к'},
{'l', 'л'},
{'m', 'м'},
{'n', 'н'},
{'o', 'о'},
{'p', 'п'},
{'q', 'ы'},
{'r', 'р'},
{'s', 'с'},
{'t', 'т'},
{'u', 'у'},
{'v', 'в'},
{'w', 'ю'},
{'x', 'ч'},
{'y', 'я'},
{'z', 'з'}
};
s1.Start();
foreach (char c in iterArr)
{
result1.Append(d[c]);
}
s1.Stop();
s2.Start();
foreach (char c in iterArr)
{
result2.Append(getChar(c));
}
s2.Stop();
Console.WriteLine("dictionary: " + s1.ElapsedTicks);
Console.WriteLine("switch: " + s2.ElapsedTicks);
Console.ReadKey();
}
private static char getChar(char c)
{
switch (c)
{
case 'a': return 'а';
case 'b': return 'б';
case 'c': return 'ц';
case 'd': return 'д';
case 'e': return 'е';
case 'f': return 'ф';
case 'g': return 'г';
case 'h': return 'ш';
case 'i': return 'и';
case 'j': return 'й';
case 'k': return 'к';
case 'l': return 'л';
case 'm': return 'м';
case 'n': return 'н';
case 'o': return 'о';
case 'p': return 'п';
case 'q': return 'ы';
case 'r': return 'р';
case 's': return 'с';
case 't': return 'т';
case 'u': return 'у';
case 'v': return 'в';
case 'w': return 'ю';
case 'x': return 'ч';
case 'y': return 'я';
case 'z': return 'з';
default: return ' ';
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQ7CiAKbmFtZXNwYWNlIGRpY3Rpb25hcnlfdnNfc3dpdGNoCnsKICAgIGNsYXNzIFByb2dyYW0KICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIGNoYXJbXSBmcm9tQXJyID0gRW51bWVyYWJsZS5SYW5nZSgnYScsICd6JyAtICdhJyArIDEpLlNlbGVjdChpID0+IChjaGFyKWkpLlRvQXJyYXkoKTsKICAgICAgICAgICAgY2hhcltdIGl0ZXJBcnIgPSBuZXcgY2hhclsxMDAwMF07CiAgICAgICAgICAgIFJhbmRvbSByID0gbmV3IFJhbmRvbSgpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJBcnIuTGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGl0ZXJBcnJbaV0gPSBmcm9tQXJyW3IuTmV4dChmcm9tQXJyLkxlbmd0aCldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXN1bHQxID0gbmV3IFN0cmluZ0J1aWxkZXIoaXRlckFyci5MZW5ndGgpOwogICAgICAgICAgICB2YXIgcmVzdWx0MiA9IG5ldyBTdHJpbmdCdWlsZGVyKGl0ZXJBcnIuTGVuZ3RoKTsKICAgICAgICAgICAgU3RvcHdhdGNoIHMxID0gbmV3IFN0b3B3YXRjaCgpOwogICAgICAgICAgICBTdG9wd2F0Y2ggczIgPSBuZXcgU3RvcHdhdGNoKCk7CiAKICAgICAgICAgICAgRGljdGlvbmFyeTxjaGFyLCBjaGFyPiBkID0gbmV3IERpY3Rpb25hcnk8Y2hhciwgY2hhcj4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7J2EnLCAn0LAnfSwKICAgICAgICAgICAgICAgICAgICB7J2InLCAn0LEnfSwKICAgICAgICAgICAgICAgICAgICB7J2MnLCAn0YYnfSwKICAgICAgICAgICAgICAgICAgICB7J2QnLCAn0LQnfSwKICAgICAgICAgICAgICAgICAgICB7J2UnLCAn0LUnfSwKICAgICAgICAgICAgICAgICAgICB7J2YnLCAn0YQnfSwKICAgICAgICAgICAgICAgICAgICB7J2cnLCAn0LMnfSwKICAgICAgICAgICAgICAgICAgICB7J2gnLCAn0YgnfSwKICAgICAgICAgICAgICAgICAgICB7J2knLCAn0LgnfSwKICAgICAgICAgICAgICAgICAgICB7J2onLCAn0LknfSwKICAgICAgICAgICAgICAgICAgICB7J2snLCAn0LonfSwKICAgICAgICAgICAgICAgICAgICB7J2wnLCAn0LsnfSwKICAgICAgICAgICAgICAgICAgICB7J20nLCAn0LwnfSwKICAgICAgICAgICAgICAgICAgICB7J24nLCAn0L0nfSwKICAgICAgICAgICAgICAgICAgICB7J28nLCAn0L4nfSwKICAgICAgICAgICAgICAgICAgICB7J3AnLCAn0L8nfSwKICAgICAgICAgICAgICAgICAgICB7J3EnLCAn0YsnfSwKICAgICAgICAgICAgICAgICAgICB7J3InLCAn0YAnfSwKICAgICAgICAgICAgICAgICAgICB7J3MnLCAn0YEnfSwKICAgICAgICAgICAgICAgICAgICB7J3QnLCAn0YInfSwKICAgICAgICAgICAgICAgICAgICB7J3UnLCAn0YMnfSwKICAgICAgICAgICAgICAgICAgICB7J3YnLCAn0LInfSwKICAgICAgICAgICAgICAgICAgICB7J3cnLCAn0Y4nfSwKICAgICAgICAgICAgICAgICAgICB7J3gnLCAn0YcnfSwKICAgICAgICAgICAgICAgICAgICB7J3knLCAn0Y8nfSwKICAgICAgICAgICAgICAgICAgICB7J3onLCAn0LcnfQogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHMxLlN0YXJ0KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKGNoYXIgYyBpbiBpdGVyQXJyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHQxLkFwcGVuZChkW2NdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzMS5TdG9wKCk7CiAgICAgICAgICAgIHMyLlN0YXJ0KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKGNoYXIgYyBpbiBpdGVyQXJyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHQyLkFwcGVuZChnZXRDaGFyKGMpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzMi5TdG9wKCk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJkaWN0aW9uYXJ5OiAiICsgczEuRWxhcHNlZFRpY2tzKTsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInN3aXRjaDogICAgICIgKyBzMi5FbGFwc2VkVGlja3MpOwogICAgICAgICAgICBDb25zb2xlLlJlYWRLZXkoKTsKIAogICAgICAgIH0KIAogICAgICAgIHByaXZhdGUgc3RhdGljIGNoYXIgZ2V0Q2hhcihjaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKGMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiByZXR1cm4gJ9CwJzsKICAgICAgICAgICAgICAgIGNhc2UgJ2InOiByZXR1cm4gJ9CxJzsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOiByZXR1cm4gJ9GGJzsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiByZXR1cm4gJ9C0JzsKICAgICAgICAgICAgICAgIGNhc2UgJ2UnOiByZXR1cm4gJ9C1JzsKICAgICAgICAgICAgICAgIGNhc2UgJ2YnOiByZXR1cm4gJ9GEJzsKICAgICAgICAgICAgICAgIGNhc2UgJ2cnOiByZXR1cm4gJ9CzJzsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOiByZXR1cm4gJ9GIJzsKICAgICAgICAgICAgICAgIGNhc2UgJ2knOiByZXR1cm4gJ9C4JzsKICAgICAgICAgICAgICAgIGNhc2UgJ2onOiByZXR1cm4gJ9C5JzsKICAgICAgICAgICAgICAgIGNhc2UgJ2snOiByZXR1cm4gJ9C6JzsKICAgICAgICAgICAgICAgIGNhc2UgJ2wnOiByZXR1cm4gJ9C7JzsKICAgICAgICAgICAgICAgIGNhc2UgJ20nOiByZXR1cm4gJ9C8JzsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOiByZXR1cm4gJ9C9JzsKICAgICAgICAgICAgICAgIGNhc2UgJ28nOiByZXR1cm4gJ9C+JzsKICAgICAgICAgICAgICAgIGNhc2UgJ3AnOiByZXR1cm4gJ9C/JzsKICAgICAgICAgICAgICAgIGNhc2UgJ3EnOiByZXR1cm4gJ9GLJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3InOiByZXR1cm4gJ9GAJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3MnOiByZXR1cm4gJ9GBJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3QnOiByZXR1cm4gJ9GCJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3UnOiByZXR1cm4gJ9GDJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3YnOiByZXR1cm4gJ9CyJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3cnOiByZXR1cm4gJ9GOJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3gnOiByZXR1cm4gJ9GHJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOiByZXR1cm4gJ9GPJzsKICAgICAgICAgICAgICAgIGNhc2UgJ3onOiByZXR1cm4gJ9C3JzsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnICc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfQogICAgfQp9