在Haskell中更新列表的元组元素

时间:2010-12-04 21:50:10

标签: list haskell

我在Haskell中编写的程序有一个我定义类型的列表实例:

type Locals = [(String, Float)]

我试图通过接收字符串并更新相应的浮点值来更新此列表,但当时字符串可能不在列表中。

由于Haskell列表是不可变的,我决定最简单的方法是执行此操作(在伪代码中):

if a tuple containing the string exists:
    delete it

add the correct data

我想知道:

a)如果有更简单的方法可以做到这一点

b)如果没有,我将如何删除正确的元素

由于

4 个答案:

答案 0 :(得分:5)

这看起来像一个关联地图。我会用Data.Map。这在其他语言中被称为“字典”。 Map.insert可以满足您的需求。

答案 1 :(得分:3)

似乎最好的方法是做

filter (\x -> fst x /= s) xs

无论如何,不​​需要任何帮助。

答案 2 :(得分:1)

来自Data.List.Utils

addToAL可以满足您的需求。

  

将指定的(键,值)对添加到给定列表中,删除任何已存在的具有相同键的现有对。

答案 3 :(得分:0)

我是Haskell的新手。只是为了好玩。

func xs str value = (str, value) : foldr step [] xs where
        step x acc
            | fst x == str = acc
            | otherwise = x:acc