Ich habe zwei Datenstrukturen, die ich in meinem Elm-Programm kombinieren möchte. Ihre Typen sind List (a, List b)
und List c
. Dies ist der einfachste Weg, die Daten im Modell zu speichern, aber ich möchte eine Funktion schreiben, um sie in ein Ansichtsmodell zu transformieren, bevor sie angezeigt wird.Wie können seltsam geformte Listen in Elm gezippt werden?
type alias Model1 a b = List (a, List b)
type alias Model2 c = List c
type alias ViewModel a b c = List (a, List (b, c))
toViewModel : Model1 -> Model2 -> ViewModel
toViewModel model1 model2 =
???
Die toViewModel
Funktion die Unterlisten in Modell 1 mit den Elementen des Modells zip sollte die Größe von model2 2. Angenommen, die gleiche ist wie die Summe der Größen der Unterlisten in Modell 1.
Wenn beispielsweise Modell1 die Länge 2 hat und die Unterlisten der beiden Elemente die Längen 3 und 4 haben, nehmen Sie an, Modell 2 hat die Länge 7. Die Unterliste des ersten Elements von Modell 1 sollte mit den ersten drei Elementen von Modell 2 und Modell gezippt werden Die Unterliste des zweiten Elements von 1 sollte mit den nächsten 4 Elementen des Modells 2 gezippt werden.
Hier ist ein Diagramm des vorherigen Beispiels:
Wie kann die toViewModel
Funktion konstruiert werden?
ich die Typ-Aliasnamen festgelegt haben. Im eigentlichen Code, den ich schreibe, handelt es sich um konkrete Typen. Ich machte den Fehler, sie wegzulassen, als ich meinen Code zum Beispiel verallgemeinerte. – Eric
Ich habe einen logischen Fehler in meiner Antwort behoben und die jetzt veraltete Typalias-Empfehlung entfernt. –
Ist dies eine genaue, verallgemeinerte Zusammenfassung Ihrer Antwort? "Um merkwürdig geformte Listen zu kombinieren, verwenden Sie Pattern Matching und Rekursion, da' zip = List.map2 (,) 'wahrscheinlich nicht flexibel genug ist." – Eric