我有一个小部件类:
public class Widget
{
...
public string UniqueID = "856D9PWW";
public int Price = 325;
public byte[] Data;
...
}我想要一个数据结构来存储我的小工具。问题是-有时我需要根据它们的价格找到一组小部件,有时我需要根据它的ID找到一个特定的小部件。
我不想使用两个数据结构,并在必要时使用每个数据结构,并在从第一个数据结构中删除时将其从另一个数据结构中删除(这包括创建我自己的数据结构来“在幕后”执行此操作)。我喜欢数据结构,它允许我使用多个键,只需要使用其中一个键从其中删除一个项,并且能够在其中一个键下存储多个项。
发布于 2010-02-06 23:33:10
一个小部件列表就足够了吗?
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);发布于 2010-02-06 23:20:39
您可以创建自己的数据容器,该容器维护必要的数据结构,以允许使用两个键进行索引。如果您实现了一个标准容器接口,您甚至可以将此自定义容器用作任何其他框架容器(同类)。
由于您可以控制Add/Remove方法,因此您可以轻松地确保根据需要更新不同的结构。您还可以确保查找这两个键的速度尽可能快。容器使用多个结构来实现不同的查找,这是一个实现细节。
发布于 2010-02-08 18:22:55
没有什么神奇的容器可以做到这一点。数据库系统处理此问题的方式与您应该采用的方式相同:对您需要的每种访问方法都有一个单独的索引。是的,它看起来很难看,但这是在多个字段上建立索引的唯一方法。如前所述,您可以将其封装在一个类中,该类为您处理在每个“索引”中添加和删除元素。
https://stackoverflow.com/questions/2213563
复制相似问题