実際には、辞書ロジック(ハッチ、バケットなど)を実行する際の固有の複雑さのために、線形検索よりも低速Dictionary<,>
になることがよくあります。私のテストでは、カットオフ(より速くなり始める)は多くの場合約150要素です。また、一般的にテーブルの数は150よりはるかに少ないので、パフォーマンスの線形リストに満足しています。Dictionary<,>
(これは、「使用しないことを意味するわけではありませんDictionary<T>
。これは、パフォーマンスがこの特定のユースケースの主な理由ではない可能性があることを意味します。一意のキーの適用とfoo ["bar"]モデルがそうである可能性があります)
これの一部は、ハッシュの取得の複雑さによるものです-特にGetHashCode()
forstring
は比較的高価です(ただし、int.GetHashCode()
目がくらむほど高速です; -p)。
実際には、ほとんどの小さなデータセットでは、2つの違いに気付くことはありません。大きなデータがある場合は、明らかにその計画を立て、それに応じてコーディングする必要があります。
Dictionary<,>
aとaのようなもののその他の違いは、List<>
一意性のようなものです。aはDictionary<,>
キーを複製できません(ただし、Lookup<,>
.NET 3.5のaは複製できます)。