Требования к моему приложению: следующее. Мне нужно хранить ордера, которые выглядят следующим образом:
Каждый ордер относится к определенному биржевому коду(строке)и имеет цену, объем и то, покупается он или продается(логический)связанный с этим.
Мне нужно выполнить несколько операций со всеми ордерами, относящимися к определенной акции, например получить сумму объемов ордеров по биржевому коду "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, соответствующую текущему заказу с соответствующим списком.
Чтобы найти лучшую цену, я просматриваю список заказов в словаре для текущего кода акции, сортирую список и распечатываю самый высокий заказ.
Удалить сложно. Сначала мне нужно найти соответствующий список по биржевому коду. Затем мне нужно будет перебрать все заказы для этого кода акции, найти тот, который соответствует текущему идентификатору заказа, и удалить его.Очевидно, что это неэффективно при большом количестве заказов на текущий код акции. Это лучший способ хранения этой информации?