C# 存储订单的字典.数据结构

C# 存储订单的字典.数据结构,c#,C#,我经常收到一些订单,我需要存储它们并用它们构建聚合。订单将有一个ID,并且将有一个与之关联的仪器类型。订单还可以附加一些事件,如添加、更新或删除。如果是更新事件,则订单将不会附带仪器类型,但订单id将相同。例如:如果我有订单id为100的仪器“xyz”订单,稍后我可以获得一个事件来更新id为100的订单20美元,并且该事件(订单)中不会出现仪器类型 一旦我收到订单,我需要为独特的仪器建立一个订单簿,例如仪器“xyz”应该在订单簿中包含所有收到的订单 我的问题是,我能以多高的效率存储它,我应该使用

我经常收到一些订单,我需要存储它们并用它们构建聚合。订单将有一个ID,并且将有一个与之关联的仪器类型。订单还可以附加一些事件,如添加、更新或删除。如果是更新事件,则订单将不会附带仪器类型,但订单id将相同。例如:如果我有订单id为100的仪器“xyz”订单,稍后我可以获得一个事件来更新id为100的订单20美元,并且该事件(订单)中不会出现仪器类型

一旦我收到订单,我需要为独特的仪器建立一个订单簿,例如仪器“xyz”应该在订单簿中包含所有收到的订单

我的问题是,我能以多高的效率存储它,我应该使用什么样的数据结构

订单如下所示:

public class Order
{
  public Order(Action add, int id, string instrument, int price)
}
订单:

public class OrderBook
{
 public string Instrument;
public List<Order> AllOrders;
}
公共类订单簿
{
公共弦乐器;
公开名单;
}
选项1:

当我收到订单时更新
字典
,将钥匙作为订单id,并为仪器创建订单簿

问题:这将处理更新事件,我可以检查订单是否已经存在,然后更新订单簿。但是,一个仪器类型应该只有一个订单簿,并且这里违反了此条件,对于仪器“xyz”,可能会有多个添加订单,这也使得操作变得困难

选项2:

使用值作为订单id更新
字典的字典

问题:这将解决上述问题,但是当我收到更新事件时,我必须检查每个值列表(即订单id列表),以查看订单是否已经存在,因为仪器类型将为空,并且我无法通过订单簿键查看

订单实时下降,存储和检索的操作必须更加高效(如果不是O(1)那么是O(logn)),请问有没有更好的方法来组织这个


注意:订单簿是仪器所有订单的集合,对于仪器来说是唯一的。订单将针对特定价格的工具,同一工具将有多个订单我从其他人(第三方lib)那里获得订单和活动,我负责构建订单簿。

我将此问题视为两个子问题的组合

  • 您正在跨输入跟踪的OrderID
  • 您正在维护每个项目的唯一订单簿
  • 在这种情况下,我建议保留这两本词典 或者,您可以将订单簿中的
    列表
    转换为
    字典
    ,以简化订单簿的搜索

    对于选项1,您提到

    但是,一种仪器类型应该只有一个订单簿,并且 这里违反了条件


    您不会有多个订单簿,而是在字典条目中维护同一订单簿的引用。

    我将此问题视为两个子问题的组合

  • 您正在跨输入跟踪的OrderID
  • 您正在维护每个项目的唯一订单簿
  • 在这种情况下,我建议保留这两本词典 或者,您可以将订单簿中的
    列表
    转换为
    字典
    ,以简化订单簿的搜索

    对于选项1,您提到

    但是,一种仪器类型应该只有一个订单簿,并且 这里违反了条件

    您不会有多个订单簿,而是在字典条目中维护同一订单簿的引用。

    试试这个

    public class Order
        {
            public Action Action { get; set; }
            public int Id { get; set; }
            public int Price { get; set; }
    
            public Order(Action add, int id, int price){
                //Initialize
            }
        }
    
        public class Instrument
        {
            public string InstrumentName { get; set; }
            public Dictionary<int, Order> OrderBook { get; set; }
    
            public Instrument(string instrument)
            {
                InstrumentName = instrument;
                //OrderBook = new List<Order>();
            }
    
            public void AddOrder(Order order)
            {
                //Check order exist condition
                OrderBook.Add(order.Id, order);
            }
        }
    
    公共类秩序
    {
    公共操作动作{get;set;}
    公共int Id{get;set;}
    公共整数价格{get;set;}
    公共秩序(行动添加、内部id、内部价格){
    //初始化
    }
    }
    公共类文书
    {
    公共字符串InstrumentName{get;set;}
    公共字典订购本{get;set;}
    公共乐器(弦乐器)
    {
    仪器名称=仪器;
    //OrderBook=新列表();
    }
    公共无效添加命令(命令)
    {
    //检查订单存在条件
    OrderBook.Add(order.Id,order);
    }
    }
    
    然后使用
    列表

    我想它应该适合你。如果有任何问题,请告诉我。

    试试这个

    public class Order
        {
            public Action Action { get; set; }
            public int Id { get; set; }
            public int Price { get; set; }
    
            public Order(Action add, int id, int price){
                //Initialize
            }
        }
    
        public class Instrument
        {
            public string InstrumentName { get; set; }
            public Dictionary<int, Order> OrderBook { get; set; }
    
            public Instrument(string instrument)
            {
                InstrumentName = instrument;
                //OrderBook = new List<Order>();
            }
    
            public void AddOrder(Order order)
            {
                //Check order exist condition
                OrderBook.Add(order.Id, order);
            }
        }
    
    公共类秩序
    {
    公共操作动作{get;set;}
    公共int Id{get;set;}
    公共整数价格{get;set;}
    公共秩序(行动添加、内部id、内部价格){
    //初始化
    }
    }
    公共类文书
    {
    公共字符串InstrumentName{get;set;}
    公共字典订购本{get;set;}
    公共乐器(弦乐器)
    {
    仪器名称=仪器;
    //OrderBook=新列表();
    }
    公共无效添加命令(命令)
    {
    //检查订单存在条件
    OrderBook.Add(order.Id,order);
    }
    }
    
    然后使用
    列表


    我想它应该适合你。如果有任何问题,请告诉我。

    为什么您的订单和订单中都有
    仪器
    ?您的订单和订单中都有仪器。为什么会这样?为什么订单和订单中都有
    仪器
    ?订单和订单中都有仪器。为什么?我从其他人那里得到订单,而且你的解决方案也不能处理