2014-07-13 107 views
0

假設我有一個鍵和一個Map的列表。迭代列表以檢索Map中與這些鍵相對應的值並創建另一個列表的最簡單方法是什麼?從地圖中檢索多個值

retrieveMultipleValues myMap myKeys = 
    map (\x -> lookup x myMap) myKeys -- ??? 

在這種情況下:

myMap :: Map String String 
myKeys :: [String] 

我的直覺告訴必須有做這個單子的方式。

+1

什麼是與你的'retrieveMultipleValues'的定義問題?這應該做的伎倆,並給你一個'可能字符串'的列表。 – Bill

回答

6

您可以使用lookupmapMaybe

import Data.Maybe 

retrieveMultipleValues m = mapMaybe (\k -> Map.lookup k m) 
+0

但我該如何返回一個純粹的列表,而不是Maybe的列表? –

+1

@AlexanderSupertramp - 它返回地圖中存在鍵的值列表。 – Lee

+0

還有一件事。我如何確保'retrieveMultipleValues'的返回值與'myKeys'中的鍵的順序相同?如果結果'retrieveMultipleValues'的長度== =='keys'的長度,那麼它們的順序是相同的,對嗎? –