Wie kann ich in Clojure den Wert eines Schlüssels finden, der tief in einer verschachtelten Kartenstruktur enthalten sein kann? Zum Beispiel:
%Vor% Clojure bietet tree-seq
um eine Tiefenüberquerung eines beliebigen Wertes durchzuführen. Dies vereinfacht die Logik, die zum Suchen Ihres verschachtelten Schlüssels benötigt wird:
Wenn Sie alle Übereinstimmungen finden, müssen Sie auch some
durch keep
:
Beachten Sie, dass Karten mit nil
-Werten möglicherweise eine spezielle Behandlung erfordern.
Update: Wenn Sie sich den obigen Code ansehen, können Sie sehen, dass k
tatsächlich eine Funktion sein kann, die viel mehr Möglichkeiten bietet:
um einen String-Schlüssel zu finden:
%Vor%um mehrere Schlüssel zu finden:
%Vor%, um nur positive Werte in Abbildungen von Ganzzahlen zu finden:
%Vor%Wenn Sie den verschachtelten Pfad kennen, verwenden Sie get-in.
%Vor%Siehe hier für Einzelheiten: Ссылка
Wenn Sie den Pfad in Ihrer verschachtelten Struktur nicht kennen, können Sie eine Funktion schreiben, die durch die verschachtelte Map recherchiert und nach dem jeweiligen Schlüssel sucht. Sie gibt ihren Wert zurück, wenn sie den ersten findet oder alle Werte zurückgibt : f in einer seq.
Wenn Sie den "Pfad" kennen, sollten Sie einsteigen :
verwenden %Vor%Wenn der "Pfad" unbekannt ist, können Sie etwas wie die nächste Funktion verwenden:
%Vor%Hinweis: Die angegebene Funktion findet nur das erste Vorkommen.
Tags und Links clojure