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