リストよりもディクショナリでアイテムを検索する方が速いという印象を受けましたが、次のコードはそうでないことを示唆しているようです:
辞書 : 66 ティック
リスト: 32 ティック
私はどこかでめちゃくちゃになったと思いますか?
static void Main(string[] args)
{
// Speed test.
Dictionary<string, int> d = new Dictionary<string, int>()
{
{"P1I1-1MS P2I1-1MS 3I-1MS 4I-1MS", 2},
{"P1I2-1MS P2I1-1MS 3I-1MS 4I-1MS", 1},
{"P1I3-1MS P2I1-1MS 3I-1MS 4I-1MS", 0},
{"P1I4-1MS P2I1-1MS 3I-1MS 4I-1MS", -1},
{"P1I5-1MS P2I1-1MS 3I-1MS 4I-1MS", 0},
{"P1I1-1MS P2I2-1MS 3I-1MS 4I-1MS", 0},
{"P1I2-1MS P2I2-1MS 3I-1MS 4I-1MS", 0},
{"P1I3-1MS P2I2-1MS 3I-1MS 4I-1MS", 0},
{"P1I4-1MS P2I2-1MS 3I-1MS 4I-1MS", 0},
{"P1I5-1MS P2I2-1MS 3I-1MS 4I-1MS", 0},
{"P1I1-1MS P2I3-1MS 3I-1MS 4I-1MS", 0},
{"P1I2-1MS P2I3-1MS 3I-1MS 4I-1MS", 0},
{"P1I3-1MS P2I3-1MS 3I-1MS 4I-1MS", 0},
{"P1I4-1MS P2I3-1MS 3I-1MS 4I-1MS", 0},
{"P1I5-1MS P2I3-1MS 3I-1MS 4I-1MS", 0},
{"P1I1-1MS P2I4-1MS 3I-1MS 4I-1MS", 2}
};
List<string> l = new List<string>();
l.Add("P1I1-1MS P2I1-1MS 3I-1MS 4I-1MS");
l.Add("P1I2-1MS P2I1-1MS 3I-1MS 4I-1MS");
l.Add("P1I3-1MS P2I1-1MS 3I-1MS 4I-1MS");
l.Add("P1I4-1MS P2I1-1MS 3I-1MS 4I-1MS");
l.Add("P1I5-1MS P2I1-1MS 3I-1MS 4I-1MS");
l.Add("P1I1-1MS P2I2-1MS 3I-1MS 4I-1MS");
l.Add("P1I2-1MS P2I2-1MS 3I-1MS 4I-1MS");
l.Add("P1I3-1MS P2I2-1MS 3I-1MS 4I-1MS");
l.Add("P1I4-1MS P2I2-1MS 3I-1MS 4I-1MS");
l.Add("P1I5-1MS P2I2-1MS 3I-1MS 4I-1MS");
l.Add("P1I1-1MS P2I3-1MS 3I-1MS 4I-1MS");
l.Add("P1I2-1MS P2I3-1MS 3I-1MS 4I-1MS");
l.Add("P1I3-1MS P2I3-1MS 3I-1MS 4I-1MS");
l.Add("P1I4-1MS P2I3-1MS 3I-1MS 4I-1MS");
l.Add("P1I5-1MS P2I3-1MS 3I-1MS 4I-1MS");
l.Add("P1I1-1MS P2I4-1MS 3I-1MS 4I-1MS");
Stopwatch sw = new Stopwatch();
string temp = "P1I1-1MS P2I4-1MS 3I-1MS 4I-1MS";
bool inDictionary = false;
sw.Start();
if (d.ContainsKey(temp))
{
sw.Stop();
inDictionary = true;
}
else sw.Reset();
Console.WriteLine(sw.ElapsedTicks.ToString());
Console.WriteLine(inDictionary.ToString());
bool inList = false;
sw.Reset();
sw.Start();
if (l.Contains(temp))
{
sw.Stop();
inList = true;
}
else sw.Reset();
Console.WriteLine(sw.ElapsedTicks.ToString());
Console.WriteLine(inList.ToString());
Console.ReadLine();
}
編集
Matthew Watson のコードの修正。