我有一个 Dictionary<int, object>
int
在哪里是 obj
的属性.有更好的数据结构吗?我觉得使用属性作为键是多余的。
这Dictionary<int, obj>
是容器类中的一个字段,允许随机索引到 obj
基于 int
的值身份证号。容器类中的简化(无异常处理)索引器如下所示:
obj this[int id]
{
get{ return this.myDictionary[id];}
}
哪里myDictionary
就是前面提到的Dictionary<int, obj>
拿着元素。
这可能是快速随机访问的典型方式,但我想征求第二意见。
最佳答案
框架中没有执行此操作的具体类。不过有一个抽象的,KeyedCollection。您必须从该类派生您自己的类并实现 GetKeyForItem() 方法。这很简单,只需返回您要索引的属性的值。
这就是您需要做的全部,但请务必留意 ChangeItemKey()。当您用作键的属性更改值时,您必须做一些有意义的事情。如果您确保该属性是不可变的(只有一个 setter/getter ),就足够简单了。但是当你不这样做时会很尴尬,对象本身现在需要知道它被存储在你的集合中。如果您对此不做任何事情(调用 ChangeItemKey),该对象就会在集合中丢失,您将无法找回它。非常接近泄漏。
请注意 Dictionary<> 如何通过分别指定键值和对象来回避这个问题。您可能仍然找不到该对象,但至少它不会因设计而丢失。
关于c# - 如果值是对象并且这些对象的属性是键,是否有比 Dictionary 更好的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2154461/