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

标签 c# idictionary

我有一个 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/

相关文章:

c# - 如何初始化 ConcurrentDictionary?错误 : "Cannot access private method ' Add' here"

c# - 单选按钮列表文本不会一直向右对齐 ASP.NET C#

powershell - 如何在 powershell 中声明 System.Collections.Generic.IDictionary

c# - 从 IEnumerable<KeyValuePair<>> 重新创建字典

web-services - 将 IDictionary 对象传递给 Web 服务

c# - 向 UI 传达错误消息的建议做法

c# - 格式字符串——左右填充双

c# - 在 Windows 中如何从 USB HID 设备获取原始描述符数据?

c# - 两个二维向量之间的角度,两种方法之间的差异?