Clojure Array von Karten


Chris Edwards

Ich versuche, diese Art von Daten in zu modellieren Clojure

name: foo    data: bar
name: stack  data: overflow
name: tess   data: ting

Ich habe überlegt, eine Karte zu verwenden, aber Sie können dort keine doppelten Schlüssel haben, damit das nicht funktioniert.

Ist es möglich, eine Reihe von Karten zu haben, ähnlich wie:

[{name: foo,    data: bar} 
{name: stack,  data: overflow} 
{name: tess,   data: ting}]

Wenn ja, wie würden Sie auf die Daten zugreifen? Wie würden Sie beispielsweise darauf zugreifen?data: overflow

Müssten Sie eine verschachtelte getAnweisung verwenden?

Zarkone

Erstens ist {:name "foo" :data "overflow"}dies EDN, nicht JSON;

Zweitens, ja, das ist in Ordnung (def map-array [{:name "foo"} {:name "bar"}])

Um den Zugriff auf Felder können Sie verwenden , getund get-in: https://clojuredocs.org/clojure.core/get-in .

(get-in map-array [1 :name])
=> "bar"

Sie können die filterFunktion auch folgendermaßen verwenden :

(first (filter #(= "foo" (:name %)) map-array))
=> {:name "foo"}

BEARBEITEN: Wenn Sie filterIhre Karten loswerden und eine konstante Zugriffszeit erhalten möchten, sollten Sie eine Art Uniq-ID verwenden:

(def map-array {:id1 {:name "foo"}
                :id2 {:name "bar"}})
(get-in map-array [:id1 :name])
=> "foo"

;; using threading macro and keyword special power:
(-> map-array :id2 :name)
=> "bar"

Verwandte Artikel


Manipulation von zwei Vektoren von Karten in Clojure

Kamikid Ich muss eine Funktion implementieren, die zwei Kartenvektoren nimmt und eine Art kombinierten einen Kartenvektor zurückgibt. Details sind unten: Eingang 1: [{:id 1 :car "A" :price 10}{:id 2 :car "B" :price 20}{:id 3 :car "C" :price 30}] Eingang 2: [{:

Clojure: Vektor von Karten aus Liste erstellen

Bill O'Brien Ich möchte einen Vektor von Karten wie folgt erstellen: [{:patid 0} {:patid 1} {:patid 2}] => [{:patid 0} {:patid 1} {:patid 2}] Wie würde ich einen Vektor von n Karten erstellen? Das nächste, was ich erreicht habe, ist dies: (defn patientid [n]

XQuery: Array von Karten erstellen

Vollblut Ich verstehe nicht, wie man in Xquery ein Array von Karten dynamisch erstellt, das am Ende als JSON serialisiert werden soll: Ich kann so ein einfaches/statisches Array von Karten erstellen let $array := [map{"id": "4711"}, map{"id": "4712"}] Ich kan

Clojure konvertiert Vektor von Karten in Karte von Vektorwerten

frank Es gibt einige SO-Beiträge zu diesem Thema, aber ich konnte nichts finden, was für das, was ich erreichen möchte, funktioniert. Ich habe einen Kartenvektor. Ich werde das Beispiel aus einem anderen verwandten SO-Beitrag verwenden: (def data [{:id 1 :f