2011-02-14 46 views
0

我有一個股票價格隨時都會變化。而且,會有許多用戶想要購買該股票。一種類型的.NET條件回調

假設股票價格是從10開始,比方說30人競購10.98,20人競購7.45,100人競購8.99。

白天,股票價格可以觸及任何這些價值,如果發生這種情況,我希望執行引用該價格的用戶的所有訂單。

從技術上講,我存儲在一個列表中。每當價格發生變化時,我將檢查列表中的所有值並執行滿足報價的那些值。


Class Bids 
{ 
    string stockname; 
    double quote; 
} 

有回調列表滿意的項目,而不是檢查所有項目,只要有一個變化的任何更好的替代方式?

如果存儲在一個列表中是不正確的做法,讓我知道最好的方法。

+0

http://msdn.microsoft.com/en-us/library/ms668604.aspx – asawyer 2011-02-14 15:25:32

回答

1

我沒有看到任何更好的方式來做到這一點,除了我可能有一個股票字典,存儲股票名稱。對於每隻股票,我都會收到一些訂單,也許按價格排序。對於每個價格,我都會有一個回調列表。

1

然後,您真正想要的是一種快速確定股票價格的變動是否需要您執行任何買入指令的方法。通常,如果價格爲或低於所述價格,則執行買入訂單。所以如果有人出價10美元,而最新的報價是8.99美元,那麼你會執行該訂單。買方以8.99美元而不是10美元獲得股份。

如果您不想在每次股票價格變化時檢查每個買入訂單,那麼您需要將訂單保留在某種排序後的集合中。如果您希望在報價爲的情況下執行訂單,並確切爲買方要求的價格,那麼您可以在列表上執行二進制搜索,以查看是否有以該確切價格訂購的一個或多個訂單。

如果要使用「處於或低於規定價格」的典型行爲執行訂單,那麼您只需檢查排序列表中的第一個項目以查看它是否等於或低於規定價格,然後執行符合條件的列表開頭的所有訂單。

你可以用List<T>來做到這一點,儘管每當你添加一些東西時你必須重新排序列表,並且從列表中刪除項目效率不高,因爲其他項目必須向上移動以填充剩下的空洞被刪除的項目。

System.Collections.Generic命名空間有許多排序的集合類型,可以讓您做到這一點,但它們都不會接受具有相同鍵的多個項目。所以你的關鍵不能只是股票價格,而必須是多部分的關鍵,包括股票價格和其他東西。儘管如此,構造一個鍵類型和一個比較函數並不難,它可以讓你保持順序,以便快速插入,刪除和搜索。

或者你可以建立一個min heap,它可以讓你快速插入物品並找到最低價的買單。查找並刪除不是價格最低的商品會比使用列表更加複雜和低效。

真正的問題你必須問自己,List是否足夠有效達到你的目的。列表中有多少項?您多久添加一次或刪除項目?你多久需要檢查一下,看是否應該執行買單?如果你只有一小部分你每分鐘檢查一次的項目,那麼一個順序列表將會表現得很好,沒有理由花費精力去改進它。如果您有10,000個掛單,並且您必須每秒檢查一次(或每秒多次),並且訂單持續不斷,那麼您將需要一個更爲複雜的計劃,其中包含一個快速搜索的有序數據結構並更新。