如果值是对象并且这些对象的属性是键,那么是否有比Dictionary更好的数据结构?

Bri*_*ett 7 c# idictionary

我有一个Dictionary<int, object>int是的属性obj.有没有更好的数据结构?我觉得使用属性是关键是多余的.

Dictionary<int, obj>是容器类中的一个字段,允许obj根据intid号随机索引值.容器类中的简化(无异常处理)索引器如下所示:

obj this[int id]
{
     get{ return this.myDictionary[id];}
}
Run Code Online (Sandbox Code Playgroud)

myDictionary前面Dictionary<int, obj>拿着物体在哪里.

这可能是快速随机访问的典型方式,但我想获得第二意见.

Lee*_*Lee 9

有一个KeyedCollection类.

编辑:KeyedCollection可以在内部使用字典,但它比原始字典更清晰的接口,因为您可以直接按值查找.不可否认,我发现它一般都没有用.


Han*_*ant 9

框架中没有具体的类来执行此操作.有一个抽象的,KeyedCollection.您必须从该类派生自己的类并实现GetKeyForItem()方法.这很简单,只需返回要索引的属性的值即可.

这就是你需要做的,但要注意ChangeItemKey().当您用作键的属性更改值时,您必须执行一些有意义的操作.如果你确保属性是不可变的(只有一个getter),那就足够了.但是当你不这样做时很尴尬,对象本身现在需要意识到它存储在你的集合中.如果你没有做任何事情(调用ChangeItemKey),对象会在集合中丢失,你找不到它.非常接近泄漏.

请注意Dictionary <>如何通过分别指定键值和对象来解决此问题.您可能仍然无法找到该对象,但至少它不会因设计而丢失.