2011-12-29 28 views
0

請參閱下面的代碼片段。我有一個很好的想法是什麼錯誤,但我不知道是否有一個簡單的方法來查詢PSQ使用下劃線時,密鑰是一個元組。至少它看起來很誘人:D。Data.PSQueue:表達式上下文中的模式語法:_

main :: IO() 
main = do 
    time <- getCPUTime 
    let qTuple = ("mine", 3455, msgs) 
    let rrq = PSQ.singleton qTuple time 
    let r = PSQ.lookup ("mine", _, _) rrq 
    print (r) 

最後,我在他們的創建時間順序往IPv4地址和需要被出隊列(過了一會兒)TCP端口號的信息:(IPv4中,測試端口),(味精,的ctime )。一方面,我希望能夠查詢是否存在任何給定元組(IPv4,tport)的隊列,並根據需要創建這樣的隊列,或者在適當的時候將隊列取消排隊。

回答

1

如果您問是否可以使用這樣的語法來查找PSQ後面的那個表單的任何元組,那麼答案是否定:)對於所有數據結構來說,這是不可能的,畢竟。

這聽起來像你應該爲每個項目(存儲在項目本身)分配一個唯一的標識符(就是這個數字是什麼?),並在其上鍵入PSQ;那麼你可以有Map s來自你關心索引(字符串,整數或其他)的項目;之後,它只是另一個查找優先事項。當然,您至少需要從唯一標識符到項目本身的Map

(順便說一句,如果這是你的older question提到的相同的元組,我會建議使用的數據類型,而不是一個元組)。

+0

你會在你的例子是優先級,這將是關鍵?我知道在這種情況下,元組將代表優先級?按什麼順序排隊? – 2011-12-29 22:27:38

+0

哎呀 - 我忘了PSQ不是地圖:)更新我的答案,實際上是有道理的。 – ehird 2011-12-29 22:32:29

+0

但是請注意,如果您*確定了自己的數據類型,則可以將優先級放入它並給它一個'比較=比較優先級'的'Ord'實例。這可以讓你從PSQ查找中獲得整個數據類型,儘管有些人會反對使用'a == b'而不是'比較b == EQ'。 – ehird 2011-12-29 22:39:47