我将变量游戏与由结构组成的MapSet相匹配。 在shell游戏中返回
iex(7)> game = Game.new
#MapSet<[
%Tris.Coordinate{col: 1, color: nil, row: 1},
%Tris.Coordinate{col: 1, color: nil, row: 2},
%Tris.Coordinate{col: 1, color: nil, row: 3},
%Tris.Coordinate{col: 2, color: nil, row: 1},
%Tris.Coordinate{col: 2, color: nil, row: 2},
%Tris.Coordinate{col: 2, color: nil, row: 3},
%Tris.Coordinate{col: 3, color: nil, row: 1},
%Tris.Coordinate{col: 3, color: nil, row: 2},
%Tris.Coordinate{col: 3, color: nil, row: 3}
]>
游戏MapSet由9个固定元素组成。我想更新每个Coordinate元素的颜色字段。类似于:col:1,row:1 color:“red”或替代col:1,row:2,color:“blue”。最好的方法是什么?我不想添加新元素但更改现有元素。 MapSet应仅由9个坐标元素组成。
答案 0 :(得分:0)
MapSet是不可变的,您无法在不删除和重新插入的情况下更改其键。要基于部分匹配查找元素,需要遍历整个MapSet。以下是如何实现这一目标:
game
|> Enum.map(fn coord ->
if coord.row == 1 && coord.col == 2 do
%{coord | color: "red"}
else
coord
end
end).
|> MapSet.new
我不确定你为什么要首先将它存储在MapSet中,但你可能要考虑将其存储在列表([1, 2, ..., 9]
)或元组({{1 }}或嵌套元组({1, 2, ..., 9}
)。