如何访问列表中的多个对象
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
我在 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