我应该设计一个解决方案,以便在搜索该集合中的项目时获得最佳性能。
问题是: 我有一个类型:
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 的特定成员查找元素时,哪个集合在访问时间方面会给我最好的结果(关于时间):
Dictionary<int, MyType>
密钥是 MyType 中的 Id 成员,而MyType是整个对象,> LI>
HashSet<MyType>
并按item.Id ... 是否可以设置为HashSet哪个项成员应该被视为SQL中的索引?
答案 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
不会有性能提升。
但在所有情况下,您都应该分析代码,以了解在具体情况下哪种实现更快。