list - “这不是记录”-尝试对列表进行排序时出错
问题描述
我想对我的列表进行降序排序,但是当我使用关键字 .sort 时出现错误:
这不是一条记录,因此它没有可访问的字段!
106| { 型号 | 团队 = List.sort.map (\p -> {p | 激活 = 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
推荐阅读
- python - Python 四位密码查找器
- r - (R) 错误:未使用的参数(禁止 = 表达式(x2 > x1))
- php - 如何使用 PHP 开发工具包创建具有对 S3 的完全访问权限的编程访问权限的 IAM 用户
- javascript - 我在使用 Javascript 和 PHP 将函数分配给 SweetAlert 时出错
- email - MsGraph WebAPI 访问共享邮箱
- urlencode - Rest Sharp 转义 %5F 字符
- database - 为什么在区块链中查询(即读取数据)很慢?
- python - 如何计算 Django 中客户的余额?
- node.js - 如何在一个会话中保存身份验证以使用 AdonisJS 5 在其他页面中检索?
- android - 如何使用表情符号作为可绘制对象来显示五彩纸屑?