【问题标题】: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
这应该稍微更有效率,因为它在更新的播放器之后重用列表的尾部。