C# 存储订单的字典.数据结构
我经常收到一些订单,我需要存储它们并用它们构建聚合。订单将有一个ID,并且将有一个与之关联的仪器类型。订单还可以附加一些事件,如添加、更新或删除。如果是更新事件,则订单将不会附带仪器类型,但订单id将相同。例如:如果我有订单id为100的仪器“xyz”订单,稍后我可以获得一个事件来更新id为100的订单20美元,并且该事件(订单)中不会出现仪器类型 一旦我收到订单,我需要为独特的仪器建立一个订单簿,例如仪器“xyz”应该在订单簿中包含所有收到的订单 我的问题是,我能以多高的效率存储它,我应该使用什么样的数据结构 订单如下所示:C# 存储订单的字典.数据结构,c#,C#,我经常收到一些订单,我需要存储它们并用它们构建聚合。订单将有一个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);
}
}
然后使用列表
我想它应该适合你。如果有任何问题,请告诉我。为什么您的订单和订单中都有仪器
?您的订单和订单中都有仪器。为什么会这样?为什么订单和订单中都有仪器
?订单和订单中都有仪器。为什么?我从其他人那里得到订单,而且你的解决方案也不能处理