Col*_*rök 0 sorting functional-programming list elm
我想对我的列表进行排序,但是当我使用关键字.sort时出现错误:
这不是记录,因此没有要访问的字段!
106 | {model | teams = List.sort.map(\ p - > {p | activated = True})model.teams,activatedOutput = True} ^^^^^^^^^这个
sort值是:Run Code Online (Sandbox Code Playgroud)List comparable -> List comparable但我需要一张带有地图字段的记录!
这是我修改过的行,我想用它对列表进行排序.
Submit ->
{ model | teams = List.sort.map (\p -> {p | activated = True}) model.teams, activatedOutput = True}
Run Code Online (Sandbox Code Playgroud)
.sort不是关键字,它是List模块内部的一个功能.有几种类型的排序功能.
签名sort是:
sort : List comparable -> List comparable
Run Code Online (Sandbox Code Playgroud)
这意味着列表中的值必须comparable在Elm中具有特殊含义.具体来说,只有数字和字符串等内置内容才具有可比性.自定义类型无法比较,也不是布尔值.
听到布尔不符合comparable分类可能听起来很奇怪,但考虑一下:提出这个问题意味着什么,True大于或小于False每种情况?相反,您必须提出自己的定义如何对自定义对象进行排序.
为此,我们可以使用List.sortBy具有此签名的函数:
sortBy : (a -> comparable) -> List a -> List a
Run Code Online (Sandbox Code Playgroud)
这可以对任何事物的列表进行排序,只要您提供定义如何对事物进行排序的函数.
所以,如果你想在那里这些球队activated是True在顶部显示,你可以使用这个排序:
List.sortBy (\x -> if x.activated then 0 else 1) model.teams
Run Code Online (Sandbox Code Playgroud)
如果你想团队中虽然activated是False要在顶部,你可以这样做:
List.sortBy (\x -> if x.activated then 1 else 0) model.teams
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |