【发布时间】:2012-04-13 23:12:25
【问题描述】:
我的申请要求如下。我需要存储如下所示的订单:
每个订单都与特定的股票代码(字符串)相关,并具有与其相关的价格、数量以及是否被买卖(布尔值)。
我需要对与特定股票相关的所有订单执行多项操作,例如获取股票代码“abc”的订单量总和。
我需要能够向数据结构中添加订单
我需要能够从数据结构中删除订单
我需要能够在添加或删除订单后找出哪个订单提供最优惠的价格。
这是我目前的想法:
public class Order : IComparable
{
private string _StockCode;
private bool _BidSide;
private int _Volume;
private decimal _Price;
private int _ExchangeOrderId;
public int CompareTo(Order other)
{
if (_BidSide != other.BidSide)
{
return _BidSide ? 1 : -1;
}
return decimal.Compare(_Price, other.Price);
}
}
然后我会将订单存储在 Dictionary
为了添加新订单,我只需根据当前股票代码在字典中找到合适的订单列表,然后插入订单。我还会在 orderstock 字典中添加一个条目,将当前订单与适当的列表相匹配。
为了找到最优惠的价格,我在字典中查找当前股票代码的订单列表,对列表进行排序并打印出最高的订单。
删除很棘手。我首先需要按股票代码查找适当的列表。然后,我需要遍历该股票代码的所有订单,并找到与当前订单 ID 匹配的订单并将其删除。如果当前股票代码有很多订单,这显然是低效的。这是存储这些信息的最佳方式吗?
【问题讨论】:
-
有些愚蠢,但标准规定 _ 后变为小写。
-
"如果当前股票代码有很多订单,这显然是低效的。"是和不是。这取决于“很多”是什么以及您希望删除订单的频率。如果您每秒删除数百个订单,而每只股票可以有 1,000 个订单,那么速度会很慢。但是,如果您正在谈论一个股票的几十个订单并且删除一个订单并不常见,那么“效率低下”不是问题。
-
有什么理由不在数据库中吗?它们是为这种行为量身定做的......
-
您需要一次将所有内容都保存在内存中吗?关系数据库是用于此类“普通”系统的常用工具。
-
+1 这个问题,因为你清楚地说明了你需要什么,很好地解释了你的想法,并提供了一些代码。 :) 好问题!
标签: c# data-structures