Haskell 从映射中检索多个值
假设我有一张钥匙清单和一张地图。迭代列表以检索映射中与这些键对应的值并创建另一个键列表的最简单方法是什么Haskell 从映射中检索多个值,haskell,Haskell,假设我有一张钥匙清单和一张地图。迭代列表以检索映射中与这些键对应的值并创建另一个键列表的最简单方法是什么 retrieveMultipleValues myMap myKeys = map (\x -> lookup x myMap) myKeys -- ??? 在这种情况下: myMap :: Map String String myKeys :: [String] 我的直觉告诉我必须有一种一元的方法来做到这一点。你可以使用查找和映射可能: import Data.Maybe
retrieveMultipleValues myMap myKeys =
map (\x -> lookup x myMap) myKeys -- ???
在这种情况下:
myMap :: Map String String
myKeys :: [String]
我的直觉告诉我必须有一种一元的方法来做到这一点。你可以使用
查找和映射可能:
import Data.Maybe
retrieveMultipleValues m = mapMaybe (\k -> Map.lookup k m)
您可以使用lookup
和mappaye
:
import Data.Maybe
retrieveMultipleValues m = mapMaybe (\k -> Map.lookup k m)
您对检索多值的定义有什么问题?这样就可以了,并给你一个可能是字符串的列表。你对检索多值的定义有什么问题?这样就可以了,给你一个Maybe String
的列表。但是我如何返回一个纯列表,而不是Maybe的列表呢?@AlexanderSupertramp-它返回一个值列表,其中键在映射中。还有一件事。如何确保retrievemultiplevalue
中的返回值与myKeys
中的键的顺序相同?如果结果的长度retrievemultiplevalue
==键的长度那么它们的顺序是相同的,对吗?@AlexanderSupertramp-mappaye
的文档建议它应该保留顺序,而当前的实现会保留顺序。但是如何返回纯列表呢,不是Maybe的列表?@AlexanderSupertramp-它返回一个值列表,其中键出现在映射中。还有一件事。如何确保retrievemultiplevalue
中的返回值与myKeys
中的键的顺序相同?如果结果retrieveMultipleValues
==键的长度
那么它们的顺序是相同的,对吗?@AlexanderSupertramp-mappaye
的文档建议它应该保留顺序,而当前的实现确实如此。