将Map.lookup映射到列表

时间:2012-11-03 12:41:33

标签: haskell

我有Data.Map(freqMap),它看起来像:

"SO" -> "10"
"OM" -> "20"
...

所以我每两个字母都会映射一些值。

我有一个字符串列表:

["SO", "OM", "ME", "ET" ...]

我需要将此列表转换为另一个列表:

["10", 20", ...]

其中每个元素都是我的Map(freqMap)中的值。

我使用递归创建了解决方案:

score_ngram :: [String] -> Map.Map String String -> [Int] -> [Int]
score_ngram [] scores result = result
score_ngram ngrams scores result = score_ngram (tail ngrams) scores (result ++ [value])
    where value = case (Map.lookup (head ngrams) scores) of
        Just v -> read v :: Int
        Nothing -> 0

但我只是想知道是否可以使用地图功能来获取它?

这样的事情:

map (Map.lookup element_of_list freqMap) ["SO", "OM", "ME", "ET" ...]

1 个答案:

答案 0 :(得分:4)

假设您希望不存在的ngrams得分为0,则可以使用:

map (read . flip (Map.findWithDefault "0") freqMap) ["SO", "OM", "ME", "ET" ...]