clojure rename-keys in verschachtelter Struktur

8

Angenommen, ich habe eine verschachtelte Struktur, etwa so:

%Vor%

Und ich muss die Schlüsselnamen in den Karten umwandeln. Ich kann die Top-Level-Schlüssel wie folgt umwandeln:

%Vor%

Aber ich bin mir nicht sicher, wie man Schlüssel, die tiefer in der Datenstruktur verschachtelt sind, umbenennt (ich möchte das: desc-Feld umbenennen in: description).

Ich bin mir ziemlich sicher, dass Reißverschlüsse die Antwort sind, aber nicht genau herausfinden können, wie es gemacht wird, oder ob es einen einfacheren Weg gibt.

    
Kevin 19.10.2011, 22:54
quelle

3 Antworten

7

Genau wie die Lösung von Brian Carper, mit der Ausnahme, dass der Namespace zu Fuß bereits eine spezifische Funktion für diesen Zweck hat. Alle Schlüssel auf allen Ebenen werden geändert, sei es in irgendeiner Art von Sammlung oder Sequenz verschachtelt.

%Vor%     
NielsK 20.10.2011, 11:10
quelle
5

postwalk ist im Allgemeinen ein ziemlich schwerer Vorschlaghammer, obwohl es von deiner ursprünglichen Frage aussieht, als ob du es vielleicht brauchst. In vielen Fällen können Sie Aktualisierungen in einer verschachtelten Struktur mit update-in durchführen:

%Vor%     
amalloy 19.10.2011 23:45
quelle
3

Wenn Sie alle :desc -Schlüssel unabhängig davon umbenennen möchten, auf welcher Verschachtelungsebene sie sich befinden, funktioniert dies möglicherweise. Wenn Sie :desc -Schlüssel nur auf einer bestimmten Verschachtelungsebene umbenennen möchten, benötigen Sie etwas raffinierteres.

Dies funktioniert nur, weil clojure.set/rename-keys derzeit nichts tut (das erste Argument wird nicht geändert), wenn das erste Argument keine Map ist.

%Vor%     
Brian Carper 19.10.2011 23:34
quelle

Tags und Links