哪个集合具有最佳访问时间来查找item.Property来自

时间:2013-04-30 13:33:56

标签: c# performance collections

我应该设计一个解决方案,以便在搜索该集合中的项目时获得最佳性能。

问题是: 我有一个类型:

class MyType {
    public int Id { get; set; }
    public int Sequence{ get; set; }
    public string Name { get; set; }
    public Enum MyEnum { get; set; }
    //.....
}

我有一个包含对象的集合:Collection<MyType>

我想通过特定成员搜索此Collection<MyType>,例如 ID

我已经分析并决定使用Dictionary<TKey, TValue>HashSet<T>。 现在,我有疑虑。当试图通过 MyType 的特定成员查找元素时,哪个集合在访问时间方面会给我最好的结果(关于时间):

  1. 使用Dictionary<int, MyType> 密钥 MyType 中的 Id 成员,而MyType是整个对象, LI>
  2. 使用HashSet<MyType>并按item.Id ...
  3. 查找

    是否可以设置为HashSet哪个项成员应该被视为SQL中的索引?

3 个答案:

答案 0 :(得分:3)

您无法为HashSet<T>指定“索引” 您希望在方案中使用Dictionary<TKey, TValue>

答案 1 :(得分:0)

当你只需要知道一个项目是否在一个集合中时,应该使用HashSet ...... IE ...

HashSet.Contains(item);

如果要从字典中获取项目并且Key是该集合的索引,则应使用Dictionary。因此,在上面的示例中...在字典中搜索特定名称将需要遍历整个字典才能找到它。

因此,在您的示例中,您将使用以下内容将Id属性用于快速查找。

var myDictionary = new Dictionary<int, MyType>();

myDictionary.Add(myType.Id, myType);

答案 2 :(得分:0)

据我了解,在您的情况下Dictionary会更快。您可以使用HashSet作为此类集合,但要按ID查找项目,您应该使用linq,Dictionary不会有性能提升。

但在所有情况下,您都应该分析代码,以了解在具体情况下哪种实现更快。