Các yêu cầu đối với đơn đăng ký của tôi như sau. Tôi cần phải lưu trữ đơn hàng giống như thế này:Cấu trúc dữ liệu C# tốt nhất cho các tình huống sau đây
Mỗi trật tự gắn liền với một stockcode cụ thể (string) và có một mức giá, khối lượng và có hay không nó đang được mua hoặc bán (boolean) liên kết với nó.
Tôi cần thực hiện một số thao tác trên tất cả các đơn đặt hàng liên quan đến một cổ phiếu cụ thể, ví dụ lấy tổng khối lượng đơn đặt hàng cho mã "abc".
tôi cần để có thể thêm lệnh cấu trúc dữ liệu
tôi cần để có thể loại bỏ một đơn đặt hàng từ các cấu trúc dữ liệu
tôi cần để có thể tìm ra đơn đặt hàng đang cung cấp mức giá tốt nhất sau khi đơn đặt hàng được thêm hoặc xóa.
Dưới đây là những gì tôi đang suy nghĩ cho đến nay:
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);
}
}
Và sau đó tôi sẽ lưu trữ các đơn đặt hàng trong một từ điển < chuỗi, Danh sách < tự > >. Trường hợp mỗi mã cổ phiếu sẽ là một chìa khóa trong từ điển trỏ đến một danh sách các đơn đặt hàng cho cổ phiếu đó. Tôi cũng sẽ duy trì từ điển khớp với id đơn đặt hàng với mã chứng khoán.
Để thêm đơn đặt hàng mới, tôi chỉ cần tìm danh sách đơn đặt hàng thích hợp trong từ điển dựa trên mã chứng khoán hiện tại và chèn thứ tự. Tôi cũng sẽ thêm một mục trong từ điển orderstock khớp với thứ tự hiện tại với danh sách approrpriate.
Để tìm giá tốt nhất, tôi tra cứu danh sách đơn hàng trong từ điển cho mã chứng khoán hiện tại, sắp xếp danh sách và in ra thứ tự cao nhất.
Xóa là khó khăn. Trước tiên, tôi cần tìm kiếm danh sách thích hợp bằng mã chứng khoán. Sau đó, tôi sẽ cần phải lặp qua tất cả các đơn đặt hàng cho mã chứng khoán đó và tìm mã khớp với id đơn đặt hàng hiện tại và xóa nó. Điều này rõ ràng là không hiệu quả nếu có rất nhiều đơn đặt hàng cho mã cổ phiếu hiện tại. Đây có phải là cách tốt nhất để lưu trữ thông tin này không?
Điều gì đó ngu ngốc, nhưng các tiêu chuẩn cho biết sau khi _ đi chữ thường. –
"Điều này rõ ràng là không hiệu quả nếu có rất nhiều đơn đặt hàng cho mã cổ phiếu hiện tại." Có và không. Nó phụ thuộc vào "rất nhiều" và tần suất bạn mong muốn xóa một đơn đặt hàng. Nếu bạn đang xóa hàng trăm đơn đặt hàng một giây và bạn có thể có 1.000 đơn đặt hàng trên mỗi cổ phiếu, thì nó sẽ chậm. Nhưng nếu bạn đang nói hàng chục đơn đặt hàng cho một cổ phiếu và xóa một đơn đặt hàng là không thường xuyên, sau đó "không hiệu quả" không phải là một vấn đề. –
Bất kỳ lý do nào không có trong cơ sở dữ liệu? Chúng được thiết kế riêng cho loại hành vi này ... – Telastyn