“这不是记录” - 尝试对列表进行排序时出现错误

问题描述 投票:0回答:1

我想对我的列表进行排序,但是当我使用关键字.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} 
list sorting functional-programming elm
1个回答
6
投票

.sort不是关键字,它是List模块中的一个函数。有几种类型的排序功能。

sort的签名是:

sort : List comparable -> List comparable

这意味着列表中的值必须是comparable,它在Elm中具有特殊含义。具体来说,只有数字和字符串等内置内容才具有可比性。自定义类型无法比较,也不是布尔值。

听到布尔值不符合comparable分类可能听起来很奇怪,但考虑到这一点:在每种情况下True是否大于或小于False是什么意思?相反,您必须提出自己的定义如何对自定义对象进行排序。

为此,我们可以使用具有此签名的List.sortBy函数:

sortBy : (a -> comparable) -> List a -> List a

这可以对任何事物的列表进行排序,只要您提供定义如何对事物进行排序的函数。

因此,如果您希望activatedTrue的那些团队显示在顶部,您可以使用它进行排序:

List.sortBy (\x -> if x.activated then 0 else 1) model.teams

然而,如果你想要activatedFalse的球队在顶部,你可以使用这个:

List.sortBy (\x -> if x.activated then 1 else 0) model.teams
© www.soinside.com 2019 - 2024. All rights reserved.