2015-12-05 31 views
4

最後一週我和榆樹試驗(所以認爲我是個初學者),並想了解以下,榆樹 - 組合和排序了多種類型的

我已經都與定義的多種類型的Foo和Bar例如日期字段。

type alias Foo = 
{ 
    date : String, 
    check : Bool 
} 

type alias Bar = 
{ 
    date : String, 
    check : Bool, 
    text : String 
} 

是否有可能結合起來,並通過使用兩種排序列表排序?(sort) 我想這樣做是爲了創建一個列表來呈現的所有項目。

謝謝!

回答

7

您可以創建一個聯合類型,可以讓你有一個混合兩個Foo和酒吧的列表:

type Combined 
    = FooWrapper Foo 
    | BarWrapper Bar 

現在你可以結合FOOS和酒吧的兩份名單,然後使用case語句作爲sortBy參數:

combineAndSort : List Foo -> List Bar -> List Combined 
combineAndSort foos bars = 
    let 
    combined = 
     List.map FooWrapper foos ++ List.map BarWrapper bars 
    sorter item = 
     case item of 
     FooWrapper foo -> foo.date 
     BarWrapper bar -> bar.date 
    in 
    List.sortBy sorter combined 
+0

This Works!謝謝:) –

+0

@Chad你如何改變排序的順序?從上升到下降,反之亦然? – Stanko

+0

@Stanko - 您需要使用[List.sortWith](http://package.elm-lang.org/packages/elm-lang/core/latest/List#sortWith),這是一種更通用的排序方式功能,允許您更改排序。 –