【发布时间】:2021-03-23 20:55:00
【问题描述】:
鉴于以下地图列表:
ball_prop_list =
[
%{"id" => "cue", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => -15.0, "z" => 0.0},
%{"id" => "ball_1", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => 15.0, "z" => 0.0},
%{"id" => "ball_2", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => 17.0, "z" => 1.1},
%{"id" => "ball_3", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => 17.0, "z" => -1.1}
]
我该如何改变,比如说,只更改"id" => "cue" 的velocity_x 和velocity_y,并保持其他所有内容不变?
我只是尝试使用更新的值创建一个新列表(这不一定是我的目标),例如:
new_prop_list = Enum.map(balls_json_list, fn(val) ->
if val["id"] == "cue" do
Map.put(val, "velocity_x" velocity_vector[:x])
Map.put(val, "velocity_z" velocity_vector[:z])
end
end)
但这没有成功,可能是因为我的地图不使用原子键 - 到目前为止我看到的所有其他示例都使用原子键,或者添加新的键和值等。
还有什么我可以尝试的吗?
【问题讨论】:
-
如果这是您要经常做的事情,您可能需要考虑将您的列表转换为地图,这样您就可以通过 id 查找并避免每次都迭代列表。
-
@AdamMillerchip 我会记住这一点,谢谢!现在我只是按照程序其余部分要求的格式。
标签: elixir