Aktualisieren einer Liste von Elementen in einer Liste? [Duplikat
Frage
Mögliches Duplikat:
Aktualisieren Sie eine Liste einer Liste von Elementen in einer einzigen Liste?
Ich habe eine Liste von Werten, wie unten gezeigt:
[ ["Off","Off","Off"],
["Off","Off","Off"],
["Off","Off","Off"] ]
und möchte Folgendes zurückgeben:
[ ["Off","Off","Off"],
["Off",*"On"*,"Off"],
["Off","Off","Off"] ]
Ich habe die folgende Funktion, die nur für eine individuelle Liste selbst funktioniert:
replaceAll 0 newValue (x:xs) = newValue:xs
replaceAll b newValue (x:xs) = x:replaceAll (b-1) newValue xs
Ich habe jedoch anscheinend Probleme, mit diesen mehreren Listen in einer Liste zu arbeiten. Wie würde ich eine Funktion entwickeln, die mit diesen beiden Listen umgeht (dh eine Liste in einer anderen Liste)?
Ich versuche immer noch, meinen Kopf um das gesamte (x: xs) Ding zu bringen.
Lösung
Listen sind nicht die beste Struktur für solche Dinge. Aber lassen Sie uns trotzdem mit Listen arbeiten.
Wir werden deine optimieren replaceAll
Anstatt dass Sie den Ersatzwert angeben, geben Sie eine Funktion an, die angibt, wie das alte durch das neue ersetzt werden.
replaceAll 0 f (x:xs) = f x:xs -- Here's where we transform x using f
replaceAll b f (x:xs) = x:replaceAll (b-1) f xs
Jetzt können wir verwenden replaceAll
An sich selbst, um den gewünschten Ersatz in einer bestimmten Zeile der Matrix auszuführen:
test = replaceAll 1 (replaceAll 1 (const "On")) yourList
Das const "On"
Die Funktion wird verwendet, da wir sie nicht mehr transformieren möchten, wenn wir zu unserem spezifischen Element kommen, sie nur durch Ersetzen möchten "On"
. Bit für jede einzelne Reihe wir tun will es verwandeln.