Outer beitreten in Clojure

8

Ähnlich wie diese Frage: Inner-beitreten in clojure

Gibt es eine Funktion für äußere Joins (links, rechts und voll), die für Sammlungen von Karten in einer der Clojure-Bibliotheken ausgeführt werden?

Ich denke, es könnte getan werden, indem der Code von clojure.set/join geändert wird, aber dies scheint eine weit verbreitete Anforderung zu sein, so dass es sich lohnt zu prüfen, ob es bereits existiert.

In etwa so:

%Vor%

Und die entsprechenden Funktionen für den linken und rechten äußeren Join, d. h. einschließlich der Einträge, für die kein Wert (oder nil -Wert) für den Join-Schlüssel auf der linken, rechten oder den beiden Seiten vorhanden ist.

    
Goran Jovic 22.10.2012, 10:54
quelle

1 Antwort

4

Sean Devlin (von Voll Disclojure Ruhm) Tisch-utils hat die folgenden Modelle verbinden:

  • inner-join
  • links-außen-verbinden
  • rechts-außen-verbinden
  • full-outer-join
  • natürlich-verbinden
  • cross-join

Es wurde seit einiger Zeit nicht mehr aktualisiert, funktioniert aber in 1.3, 1.4 und 1.5. Um es ohne externe Abhängigkeiten funktionieren zu lassen:

  • ersetzt fn-tuple durch juxt
  • ersetzt die gesamte (:use ) -Klausel in der ns-Deklaration durch (require [clojure.set :refer [intersection union]])
  • fügen Sie die Funktion map-vals von unten hinzu:

entweder

%Vor%

oder für Clojure 1.5 und höher

%Vor%

Nutzung der Bibliothek ist Join-Typ, zwei Sammlungen (zwei Sätze von Karten wie dem obigen Beispiel oder zwei SQL-Resultsets) und mindestens eine fn verbinden. Da Schlüsselwörter Funktionen auf Karten sind, genügen normalerweise nur die Join-Schlüssel:

%Vor%

Wenn ich mich recht erinnere, hat Sean schon vor einiger Zeit versucht, Table-Utils in contrib zu bekommen, aber das hat nie geklappt. Schade, dass es nie ein eigenes Projekt (auf Github / Clojars) bekommen hat. Ab und zu wie dies eine Frage für eine Bibliothek erscheint auf Stackoverflow oder Clojure Google-Gruppe.

Eine weitere Option könnte die Verwendung der Datalog-Bibliothek von Datomic zur Abfrage von Clojure-Datenstrukturen sein. Stuart Halloway hat einige Beispiele in seine Hauptgründe.

    
NielsK 24.05.2013, 15:56
quelle

Tags und Links