次のコードがあるとします。
private static int DoSwitch(string arg)
{
switch (arg)
{
case "a": return 0;
case "b": return 1;
case "c": return 2;
case "d": return 3;
}
return -1;
}
private static Dictionary<string, Func<int>> dict = new Dictionary<string, Func<int>>
{
{"a", () => 0 },
{"b", () => 1 },
{"c", () => 2 },
{"d", () => 3 },
};
private static int DoDictionary(string arg)
{
return dict[arg]();
}
両方の方法を繰り返して比較することにより、「a」、「b」、「c」、「d」がより多くのキーを含むように拡張された場合でも、辞書がわずかに高速になることがわかります。なんでそうなの?
これは循環的複雑度と関係がありますか?これは、ジッターがディクショナリ内のreturnステートメントをネイティブコードに1回だけコンパイルするためですか?辞書のルックアップがO(1)であるためですか?これはswitchステートメントには当てはまらない可能性がありますか?(これらは単なる推測です)