Wert des spezifischen Schlüssels in verschachtelter Map suchen

8

Wie kann ich in Clojure den Wert eines Schlüssels finden, der tief in einer verschachtelten Kartenstruktur enthalten sein kann? Zum Beispiel:

%Vor%     
Paul D. Eden 22.01.2015, 14:35
quelle

4 Antworten

12

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:

%Vor%

Wenn Sie alle Übereinstimmungen finden, müssen Sie auch some durch keep :

ersetzen %Vor%

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%
xsc 22.01.2015, 19:48
quelle
7

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.

    
Paul D. Eden 22.01.2015 14:59
quelle
3

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.

    
Jarlax 22.01.2015 15:11
quelle
2

Hier ist eine Version, die den Schlüssel finden wird, ohne den Pfad dazu zu kennen. Wenn mehrere übereinstimmende Schlüssel vorhanden sind, wird nur einer zurückgegeben:

%Vor%

Wenn Sie alle Werte benötigen, können Sie verwenden:

%Vor%     
Symfrog 22.01.2015 15:07
quelle

Tags und Links