Haskell元组搜索列表

nic*_*las 7 haskell tuples list

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

[("username", 123), ("df", 54), ("as",2 34)]
Run Code Online (Sandbox Code Playgroud)

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

知道怎么做吗?

jd.*_*d.k 15

像这样使用Data.Map:

import qualified Data.Map as Map

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

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

m2 = Map.insert "df" 78 m1
Run Code Online (Sandbox Code Playgroud)

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

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

m3 = Map.insertWith (+) "username" 4 m1
Run Code Online (Sandbox Code Playgroud)

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

import Data.Map ((!))
m3 ! "username"
Run Code Online (Sandbox Code Playgroud)

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

为了安全查找:

Map.lookup :: Map k a -> k -> Maybe a
Map.lookup "usrname" m3
Run Code Online (Sandbox Code Playgroud)

键上有拼写错误,所以返回Nothing.