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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top