首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个键比一个键好

两个键比一个键好
EN

Stack Overflow用户
提问于 2010-02-06 23:17:40
回答 4查看 347关注 0票数 2

我有一个小部件类:

代码语言:javascript
复制
public class Widget
{
    ...
    public string UniqueID = "856D9PWW";
    public int Price = 325;
    public byte[] Data;
    ...
}

我想要一个数据结构来存储我的小工具。问题是-有时我需要根据它们的价格找到一组小部件,有时我需要根据它的ID找到一个特定的小部件。

我不想使用两个数据结构,并在必要时使用每个数据结构,并在从第一个数据结构中删除时将其从另一个数据结构中删除(这包括创建我自己的数据结构来“在幕后”执行此操作)。我喜欢数据结构,它允许我使用多个键,只需要使用其中一个键从其中删除一个项,并且能够在其中一个键下存储多个项。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-06 23:33:10

一个小部件列表就足够了吗?

代码语言:javascript
复制
List<Widget> widgetList = new List<Widget>();

widgetList.Add(new Widget(UniqueID, price, data));

//To query by UniqueID
Widget uniqueWidget =  widgetList.Single(x => x.uniqueID.Equals("123"));

//To query by price
List<Widget> widgetsByPrice = widgetList.Where(x => x.price.Equals(100.00));

//To remove
widgetList.Remove(uniqueWidget);
票数 4
EN

Stack Overflow用户

发布于 2010-02-06 23:20:39

您可以创建自己的数据容器,该容器维护必要的数据结构,以允许使用两个键进行索引。如果您实现了一个标准容器接口,您甚至可以将此自定义容器用作任何其他框架容器(同类)。

由于您可以控制Add/Remove方法,因此您可以轻松地确保根据需要更新不同的结构。您还可以确保查找这两个键的速度尽可能快。容器使用多个结构来实现不同的查找,这是一个实现细节。

票数 7
EN

Stack Overflow用户

发布于 2010-02-08 18:22:55

没有什么神奇的容器可以做到这一点。数据库系统处理此问题的方式与您应该采用的方式相同:对您需要的每种访问方法都有一个单独的索引。是的,它看起来很难看,但这是在多个字段上建立索引的唯一方法。如前所述,您可以将其封装在一个类中,该类为您处理在每个“索引”中添加和删除元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2213563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档