【问题标题】:How to modify an item in a list in Elm?如何修改 Elm 列表中的项目?
【发布时间】:2023-01-12 06:05:35
【问题描述】:

我刚开始学习 Elm,我对如何修改列表中的项目有点困惑。这是我的结构:

type alias Player =
    { id : Int
    , name : String
    , isActive : Bool
    }

type alias Model =
    { players : List Player
    , newPlayer : Player
    }

所以我有一个玩家列表,我想编辑列表中的特定玩家(例如,将 Id = 2 字段“isActive”的玩家更改为 True)。我该怎么办?

【问题讨论】:

    标签: list replace edit elm


    【解决方案1】:

    一种解决方案是使用List.map

    setIsActiveForPlayer : List Player -> Int -> Bool -> List Player
    setIsActiveForPlayer players id isActive =
      let
        update player =
          if player.id == id then
            { player | isActive = isActive }
          else
            player
      in
      players |> List.map update
    

    另一种解决方案“手动”执行迭代:

    setIsActiveForPlayer : List Player -> Int -> Bool -> List Player
    setIsActiveForPlayer players id isActive =
        case players of
            [] ->
                []
    
            player :: rest ->
                if player.id == id then
                    { player | isActive = isActive } :: rest
    
                else
                    player :: setActivePlayer rest id isActive
    

    这应该稍微更有效率,因为它在更新的播放器之后重用列表的尾部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2018-10-05
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多