Haskell元组搜索列表

时间:2010-06-21 06:42:11

标签: list haskell tuples

我有一个像这样的元组列表:

[("username", 123), ("df", 54), ("as",2 34)]

我需要根据用户名搜索值。我使用查找但我需要更改整数的值并写回文件。我的逻辑是删除元组并插入另一个新的元组值而不是更改它。

知道怎么做吗?

3 个答案:

答案 0 :(得分:15)

像这样使用 Data.Map

import qualified Data.Map as Map

m1 :: Map String Int
m1 = Map.fromList [("username", 123), ("df", 54), ("as",234)]

让我们将54替换为78(在“df”上):

m2 = Map.insert "df" 78 m1

您可以使用insertWith'将旧值和新值与函数组合。

这里我们在“用户名”上插入4,并将4添加到“用户名”指向的任何值。

m3 = Map.insertWith (+) "username" 4 m1

如果您确定某个键位于地图中,则可以使用(!)运算符访问其值:

import Data.Map ((!))
m3 ! "username"

给出了127。但要注意,如果密钥不在地图中,它可能会引发异常!

安全查询:

Map.lookup :: Map k a -> k -> Maybe a
Map.lookup "usrname" m3

密钥上有拼写错误,因此会返回Nothing

答案 1 :(得分:1)

repList old new xs = map (\v@(x,y) -> if x == old then (new,y) else v) xs

答案 2 :(得分:0)

如果使用Data.Map类型,则可以使用

之类的函数
updatedMap = Data.Map.updateWithKey (\_ _ -> Just 234) "username" myMap

按照您给出列表的方式,您必须通过类似

的方式构建地图
myMap = Data.Map.fromList (map (\ (a,b) -> (b,a)) datalist)

最后,您可以使用Data.Map.toList将事物返回到值列表。