从Elm中的记录列表中返回单个记录

从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 =

我试图在满足条件时从记录列表中返回一条记录。 现在,当条件为false时,我返回一个带有空字段的记录

这样行吗? 有更好的办法吗

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表达式来检查这个结果,对吗?好吧,我选择了一个类似于@marcosh
List.filter(\I->I.id==id)xs
的解决方案,但是我要把它标记为一个可接受的答案,因为它提供了另一个视角。非常感谢。