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

时间:2016-06-04 07:25:37

标签: elm

我正在尝试在满足条件时从记录列表中返回单个记录。 现在,当条件为假时,我正在返回一个空字段的记录。

这样好吗? 还有更好的方法吗?

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

1 个答案:

答案 0 :(得分:4)

核心List包中的列表没有搜索功能,但社区在List-Extra中有一个。使用此功能,可以编写上述程序:

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)