Diese Funktion nimmt einen Satz von Vektoren von Zahlen und gibt den Schnittpunkt von ihnen:Wie finden Sie die Schnittmenge von Kartensätzen in clojure?
(defn foo [& sets] (apply clojure.set/intersection (map #(set %) sets)))
zB.
user=> (foo [1 2 3] [3 4 5 1] [33 3 3 1])
#{1 3}
Wie können Sie die gleiche Art von Sache, die Elemente der Eingangssätze gegeben erreichen sind Karten mit einem :id
Schlüssel als einzigartige Eigenschaft von der Karte zu benutzen?
dh. Ich versuche, eine Funktion foo2 zu schreiben, das dies tut:
user=> (foo2 [{:id 1 ...} {:id 2 ...} {:id 3 ...}]
[{:id 3 ...} {:id 4 ...} {:id 5 ...} {:id 1 ...}]
[{:id 33 ...} {:id 3 ...} {:id 3 ...} {:id 1 ...}])
[{:id 1 ...} {:id 3 ...}]
Gibt es eine einfache Möglichkeit, das zu tun?
Oder ist die einzige Möglichkeit, die IDs zu sammeln, den Schnittpunkt der Schlüssel zu bekommen und dann die Schlüssel in den Eingabesätzen zu suchen?
Gibt es eine Möglichkeit, die Mengenfunktionen (Vereinigung, Schnittpunkt usw.) zu "überladen", indem Sie eine Schlüsselwertfunktion definieren, die den Schlüssel für ein beliebiges Objekt zurückgibt, oder nur Sätze mit verwenden können Primitive Werte?
Wie erstellen Sie die resultierende '{: id 1 ...}' Karte aus den gegebenen '{: id 1 ...} Karten? – Thumbnail
@Thumbnail Die Ausgabe-Map sollte dieselbe wie die Eingabe-Map sein; Es ist keine Art von Aggregation der verschiedenen Karten mit einer gemeinsamen ID. In dem Fall, in dem die vollständigen Karten nicht gleich sind (dh mehrere IDs mit unterschiedlichem Inhalt), ist es nicht wichtig, welches ausgewählt ist, solange nur eine Karte die ID in der Ergebnismenge hat. – Doug