Ich mag eine mermaid Graph von verschachtelter Karte erstellen, wie dieseClojure - Transformation verschachtelte Karte
{"a" {"b" {"c" nil
"d" nil}}
"e" {"c" nil
"d" {"h" {"i" nil
"j" nil}}}}
ich denke, es sollte zunächst verschachtelte Karte auf diese Form konvertieren. Dann sollte es einfach sein.
[{:out-path "a" :out-name "a"
:in-path "a-b" :in-name "b"}
{:out-path "a-b" :out-name "b"
:in-path "a-b-c" :in-name "c"}
{:out-path "a-b" :out-name "b"
:in-path "a-b-d" :in-name "d"}
{:out-path "e" :out-name "e"
:in-path "e-f" :in-name "f"}
{:out-path "e" :out-name "e"
:in-path "e-c" :in-name "c"}
{:out-path "e" :out-name "e"
:in-path "e-d" :in-name "d"}
{:out-path "e-d" :out-name "d"
:in-path "e-d-h" :in-name "h"}
{:out-path "e-d-h" :out-name "h"
:in-path "e-d-h-i" :in-name "i"}
{:out-path "e-d-h" :out-name "h"
:in-path "e-d-h-j" :in-name "j"}]
EDIT:
Dies ist, was ich geschaffen habe. Aber ich habe absolut keine Idee, wie man den Pfad zur Ergebniskarte hinzufügt.
(defn myfunc [m]
(loop [in m out []]
(let [[[k v] & ts] (seq in)]
(if (keyword? k)
(cond
(map? v)
(recur (concat v ts)
(reduce (fn [o k2]
(conj o {:out-name (name k)
:in-name (name k2)}))
out (keys v)))
(nil? v)
(recur (concat v ts) out))
out))))
Sie benötigen spezielle Hilfe mit Code dass du es versucht hast? Könnten Sie das posten? – Bill
@Bill, ich brauche Hilfe den "Pfad" für jeden Artikel hinzufügen. – Ribelo
Normalerweise würden Sie den Pfad der aktuellen Ebene in eine Variable deklarieren (lassen), dann fügen Sie diese der Struktur, die Sie erstellen, hinzu und übergeben sie dann, wenn Sie zur nächsten Ebene zurückkehren und sie weiter erstellen. Eine Multiaritätsfunktion könnte in diesem Fall einfacher zu strukturieren sein als eine Schleife. – Bill