Какая C#структура данных(s)лучше всего подходит для следующей ситуации

Требования к моему приложению: следующее. Мне нужно хранить ордера, которые выглядят следующим образом:

  • Каждый ордер относится к определенному биржевому коду(строке)и имеет цену, объем и то, покупается он или продается(логический)связанный с этим.

  • Мне нужно выполнить несколько операций со всеми ордерами, относящимися к определенной акции, например получить сумму объемов ордеров по биржевому коду "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, соответствующую текущему заказу с соответствующим списком.

  • Чтобы найти лучшую цену, я просматриваю список заказов в словаре для текущего кода акции, сортирую список и распечатываю самый высокий заказ.

  • Удалить сложно. Сначала мне нужно найти соответствующий список по биржевому коду. Затем мне нужно будет перебрать все заказы для этого кода акции, найти тот, который соответствует текущему идентификатору заказа, и удалить его.Очевидно, что это неэффективно при большом количестве заказов на текущий код акции. Это лучший способ хранения этой информации?

8
задан svick 13 April 2012 в 23:43
поделиться