从Elm中的记录列表中返回单个记录
我试图在满足条件时从记录列表中返回一条记录。 现在,当条件为false时,我返回一个带有空字段的记录 这样行吗? 有更好的办法吗从Elm中的记录列表中返回单个记录,elm,Elm,我试图在满足条件时从记录列表中返回一条记录。 现在,当条件为false时,我返回一个带有空字段的记录 这样行吗? 有更好的办法吗 xs = [ { name = "Mike", id = 1 } , { name = "Paul", id = 2 } , { name = "Susan", id = 3 } ] getNth id xs = let x = List.filter (\i -> i.id =
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
包中没有列表搜索功能,但社区中有一个。使用此功能,可以编写上述程序:
import List.Extra exposing (find)
getNth n xs =
xs
|> find (.id >> (==) n)
|> Maybe.withDefault { id = n, name = "" }
在Elm中处理“可能没有值”的规范方法是返回Maybe
值。通过这种方式,getNth
的用户可以选择在找不到他要查找的值时应该做什么。因此,我宁愿省略最后一行,得出非常简洁的结论:
getNth n = find (.id >> (==) n)
如果它起作用,那么可能没问题,不是吗?我不知道我是否正确理解了你的问题,但也许你在寻找@Edvin Tenovim是的,它起作用了,但我觉得我做的工作太多了。这就是为什么我认为可能有一种更简单/惯用的方法我没有。@JoseOrtega为什么不将
List.filter(\I->I.id==id)xs作为maybe Item
返回,然后在调用函数中处理这些情况呢,也许:)但是如果要在另一个函数中使用结果,我必须用另一个case表达式来检查这个结果,对吗?好吧,我选择了一个类似于@marcoshList.filter(\I->I.id==id)xs
的解决方案,但是我要把它标记为一个可接受的答案,因为它提供了另一个视角。非常感谢。