Frage Aktualisieren von Tupelelementen einer Liste in Haskell


Ein Programm, das ich in Haskell schreibe, hat eine Listeninstanz meines definierten Typs:

type Locals = [(String, Float)]

Ich versuche, diese Liste zu aktualisieren, indem ich einen String empfange und den entsprechenden Gleitkommawert aktualisiere, aber der String ist möglicherweise zu diesem Zeitpunkt nicht in der Liste.

Da Haskell-Listen unveränderlich sind, entschied ich, dass der einfachste Weg (in Pseudocode) war:

if a tuple containing the string exists:
    delete it

add the correct data

Ich möchte es wissen:

a) Wenn es einen einfacheren Weg gibt, dies zu tun

b) Wenn nicht, wie würde ich das richtige Element löschen?

Vielen Dank


5
2017-12-04 21:50


Ursprung


Antworten:


Das sieht wie eine assoziative Karte aus. ich würde ... benutzen Data.Map. Dies wird in anderen Sprachen als "Wörterbuch" bezeichnet. Map.insert tut was du brauchst.


5
2017-12-04 21:56



Scheint, dass der beste Weg dazu wäre, zu tun

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

Brauche keine Hilfe mehr, danke trotzdem.


3
2017-12-04 21:54



Ich bin ein Neuling für Haskell. Nur zum Spaß.

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

0
2017-12-05 10:42



addToAL von Data.List.Utils macht was du willst.

Fügt der angegebenen Liste das angegebene Paar (Schlüssel, Wert) hinzu und entfernt alle vorhandenen Paare mit demselben bereits vorhandenen Schlüssel.


0
2017-12-05 12:38