Angenommen, ich habe zwei Datensätze. Eine könnte die LabelledGeneric
Darstellung einer Fallklasse sein; während der andere einen Programmierer bereitgestellte Datensatz sein könnten, die für Menschen lesbaren Bereich Etiketten liefert:In Shapeless, zwei Datensätze vorausgesetzt, wie benötige ich, dass beide Datensätze die gleichen Schlüssel haben und sich ihnen anschließen?
case class Book(author: String, title: String, quantity: Int)
val labels = ('author ->> "Author") :: ('title ->> "Title") :: ('quantity ->> "Quantity") :: HNil
Gibt es eine Möglichkeit zu
- verlangt, dass die markierte generische Darstellung von
Book
und der Satzart vonlabels
besitzen die gleichen Schlüssel (oder mindestens die Schlüssel vonlabel
sind eine Teilmenge der Schlüssel vonBook
) und - "verbinden" oder zip sie zusammen durch Schlüssel, so dass Sie einen Datensatz mit den gleichen Schlüsseln wie der linke herausbekommen Argument, wobei die Werte ein Paar sind (lhs value e, Option [rhs-Wert]) oder so ähnlich?
Ich denke, das mit einer Kombination machbar sein könnte für jede Seite die Keys
Zeuge zu extrahieren, dann Align
verwenden. (Ich würde gerne sehen, dass dies den out-of-the-box-formlosen Operationen hinzugefügt wird.) Dies ermöglicht es uns, den Feldern einer Klasse "Metadaten" zuzuordnen (anstatt zum Beispiel Annotationen zu verwenden).
es kommt mir vor, die Verwendung von 'Remover', um gebrauchte Schlüssel aus' R' zu eliminieren, ist wahrscheinlich nicht notwendig. Ich habe es von einigen anderen Ops abgeholt. Ich frage mich, ob es eine Art Leistungszeitgewinn bei der Kompilierung gibt? Ich werde wahrscheinlich versuchen, es in einer Bearbeitung zu entfernen. – tksfz
Jetzt ist mir klar, dass die Verwendung von 'Remover' zur Eliminierung verbrauchter Schlüssel aus' R' nützlich ist, um den "Outer Join" zu implementieren: Sobald wir 'R = HNil' haben, können wir einfach den Rest von' L' anhängen – tksfz
Ihre Herangehensweise ist großartig! –