Elm - 对多种类型进行组合和排序
Elm - Combining and sorting over multiple types
上周我正在尝试使用 elm(所以认为我是初学者)并且想知道以下内容,
我已经定义了多个类型,例如 Foo 和 Bar 都带有日期字段。
type alias Foo =
{
date : String,
check : Bool
}
和
type alias Bar =
{
date : String,
check : Bool,
text : String
}
是否可以使用 sort 对两个列表进行组合和排序?(sort)
我想这样做来创建一个列表来展示所有项目。
谢谢!
您可以创建一个联合类型,允许您拥有一个混合了 Foo 和 Bar 的列表:
type Combined
= FooWrapper Foo
| BarWrapper Bar
现在您可以合并两个 Foos 和 Bars 列表,然后使用 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
上周我正在尝试使用 elm(所以认为我是初学者)并且想知道以下内容,
我已经定义了多个类型,例如 Foo 和 Bar 都带有日期字段。
type alias Foo =
{
date : String,
check : Bool
}
和
type alias Bar =
{
date : String,
check : Bool,
text : String
}
是否可以使用 sort 对两个列表进行组合和排序?(sort) 我想这样做来创建一个列表来展示所有项目。
谢谢!
您可以创建一个联合类型,允许您拥有一个混合了 Foo 和 Bar 的列表:
type Combined
= FooWrapper Foo
| BarWrapper Bar
现在您可以合并两个 Foos 和 Bars 列表,然后使用 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