List 元组搜索的Haskell列表
我有一个元组列表,如下所示:List 元组搜索的Haskell列表,list,haskell,tuples,List,Haskell,Tuples,我有一个元组列表,如下所示: [("username", 123), ("df", 54), ("as",2 34)] 我需要根据用户名搜索值。我已经使用了查找,但我需要更改整数的值并写回文件。我的逻辑是删除元组并插入另一个新的元组值,而不是更改它 你知道怎么做吗?如果你使用Data.Map类型,你可以使用如下函数 updatedMap = Data.Map.updateWithKey (\_ _ -> Just 234) "username" myMap 按照您给出列表的方式,您必须
[("username", 123), ("df", 54), ("as",2 34)]
我需要根据用户名搜索值。我已经使用了查找,但我需要更改整数的值并写回文件。我的逻辑是删除元组并插入另一个新的元组值,而不是更改它
你知道怎么做吗?如果你使用Data.Map类型,你可以使用如下函数
updatedMap = Data.Map.updateWithKey (\_ _ -> Just 234) "username" myMap
按照您给出列表的方式,您必须通过以下方式构建地图
myMap = Data.Map.fromList (map (\ (a,b) -> (b,a)) datalist)
最后,您可以使用Data.Map.toList将内容返回到值列表 使用数据。映射如下:
import qualified Data.Map as Map
m1 :: Map String Int
m1 = Map.fromList [("username", 123), ("df", 54), ("as",234)]
让我们将54替换为78(在“df”中):
您可以使用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
repList old new xs = map (\v@(x,y) -> if x == old then (new,y) else v) xs
repList old new xs = map (\v@(x,y) -> if x == old then (new,y) else v) xs