Return Elm 记录列表中的一条记录
Return a single record from a list of records in Elm
我正在尝试 return 在满足条件时从记录列表中提取一条记录。
现在,当条件为假时,我正在 return 创建一个包含空字段的记录。
这样可以吗?
有没有更好的方法?
xs =
[ { name = "Mike", id = 1 }
, { name = "Paul", id = 2 }
, { name = "Susan", id = 3 }
]
getNth id xs =
let
x =
List.filter (\i -> i.id == id) xs
in
case List.head x of
Nothing ->
{ name = "", id = 0 }
Just item ->
item
核心 List
包中没有列表搜索功能,但社区 List-Extra 中有一个。有了这个函数,上面的程序就可以写成:
import List.Extra exposing (find)
getNth n xs =
xs
|> find (.id >> (==) n)
|> Maybe.withDefault { id = n, name = "" }
在 Elm 中处理 "there might not be a value" 的规范方法是 return 一个 Maybe
值——这样,getNth
的用户可以选择应该做什么当找不到他要找的值时。所以我宁愿省略最后一行,到达非常整洁的地方:
getNth n = find (.id >> (==) n)
我正在尝试 return 在满足条件时从记录列表中提取一条记录。 现在,当条件为假时,我正在 return 创建一个包含空字段的记录。
这样可以吗? 有没有更好的方法?
xs =
[ { name = "Mike", id = 1 }
, { name = "Paul", id = 2 }
, { name = "Susan", id = 3 }
]
getNth id xs =
let
x =
List.filter (\i -> i.id == id) xs
in
case List.head x of
Nothing ->
{ name = "", id = 0 }
Just item ->
item
核心 List
包中没有列表搜索功能,但社区 List-Extra 中有一个。有了这个函数,上面的程序就可以写成:
import List.Extra exposing (find)
getNth n xs =
xs
|> find (.id >> (==) n)
|> Maybe.withDefault { id = n, name = "" }
在 Elm 中处理 "there might not be a value" 的规范方法是 return 一个 Maybe
值——这样,getNth
的用户可以选择应该做什么当找不到他要找的值时。所以我宁愿省略最后一行,到达非常整洁的地方:
getNth n = find (.id >> (==) n)