如何访问列表中的多个对象

How access multiples objects in a list

我在 Elm-lang 中有这段代码:

import Json.Decode exposing (..)
import Html exposing (..)


json =  -- List that contains and will have many users
 """
 [{\"ssn\":\"111.111.111-11\",\"name\":\"People Silva\",\"email\":\"people@eat.com\"}, {\"ssn\":\"000.000.000-00\",\"name\":\"Pet Silva\",\"email\":\"pet@eat.com\"}]
 """

type alias User =
  { name : String
  , email: String
  , ssn: String
  }


userDecoder : Json.Decode.Decoder User
userDecoder =
  Json.Decode.map3 User
    (field "name" string)
    (field "email" string)
    (field "ssn" string)


userListDecoder : Json.Decode.Decoder (List User)
userListDecoder =
  Json.Decode.list userDecoder


main =
  let
    decoded = (decodeString userListDecoder json)
  in
    case decoded of
      Ok u ->
        span [] [text (toString u)]

      Err e ->
        span [] [text (toString e)]

此代码运行良好,并输出如下(预期如何):

[{ name = "People Silva", email = "people@eat.com", ssn = "111.111.111-11" },{ name = "Pet Silva", email = "pet@eat.com", ssn = "000.000.000-00" }]

这里开始我的疑问,如何获取列表中所有用户的列表?(作为奖励,获取列表中的用户数量)

-- already tried, unsuccessfully
u[0].name
u[1].name

用户在 List User 值中,因此您可以使用 functions from the List package 访问它们。

如果想从用户列表中获取用户名列表,可以调用List.map .name users.

如果想把用户名写在自己的div中,可以这样写:

showUser : User -> Html msg
showUser user =
    div [] [ text user.name ]

并从 main 调用它,如下所示:

main =
  let
    decoded = (decodeString userListDecoder json)
  in
    case decoded of
      Ok users ->
        div [] (List.map showUser users)

      Err e ->
        span [] [text (toString e)]

获取列表的长度只需要使用List.length函数即可:List.length users