0

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

问题是:我有一个类型:

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

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

  1. 使用Dictionary<int, MyType>其中是 MyType 的Id成员,而 MyType 是整个对象,
  2. 使用 aHashSet<MyType>并通过 item.Id 在其中查找 ...

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

4

3 回答 3

3

您不能为HashSet<T>.
你想Dictionary<TKey, TValue>在你的场景中使用。

于 2013-04-30T13:38:55.780 回答
0

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

HashSet.Contains(item);

如果您从字典中获取项目并且键是该集合的索引,则应使用字典。所以在你上面的例子中......在字典中搜索特定名称将不得不遍历整个字典才能找到它。

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

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

myDictionary.Add(myType.Id, myType);
于 2013-04-30T13:38:34.840 回答
0

据我了解,在您的情况下Dictionary会更快。您可以使用HashSet这样的集合,但要按 id 查找项目,您应该使用 linq 并且不会对Dictionary.

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

于 2013-04-30T13:41:24.043 回答