我有这个价值
%{is_public: true, discoverable: true}
Run Code Online (Sandbox Code Playgroud)
这可能是任何东西没有具体is_public和discoverable,但所有keys这些将上述进来Map将在可用struct的摄像机。
%Camera{
__meta__: #Ecto.Schema.Metadata<:loaded, "cameras">,
created_at: #DateTime<2017-08-25 14:13:55.524563Z>,
discoverable: true,
exid: "everc-fhlcr",
id: 12769,
is_online: true,
is_online_email_owner_notification: false,
is_public: true,
last_online_at: #DateTime<2019-05-14 11:10:45.000000Z>,
last_polled_at: #DateTime<2019-05-14 11:10:47.000000Z>,
}
Run Code Online (Sandbox Code Playgroud)
我想Camera在Mapie的基础上从结构中获取值
iex(4)> changes = %{is_public: true, discoverable: true} |> Map.keys
[:discoverable, :is_public]
Run Code Online (Sandbox Code Playgroud)
我可以从更改映射中获取密钥 Map.keys
但我不确定如何从 Camera 结构映射值。
从上面的相机结构和更改地图,我想获得这种类型的地图。
%{
is_public: true,
discoverable: true
}
Run Code Online (Sandbox Code Playgroud)
它看起来与上面的地图相同,但它取决于 Camera Struct 值,它们都可以是 false 或 true ,与 id、exid、is_online 相同。
如果我这样做
Enum.map(changed_keys, fn(key) ->
key: Map.get(camera, key)
end)
Run Code Online (Sandbox Code Playgroud)
这仍然不起作用,任何帮助将是可观的。谢谢
我只想在changesMap 中使用匿名键制作一个映射,然后从CameraStruct获取它们的值并使用这些值和匿名键创建一个新映射。
第一个任务是提取所需的密钥 - 它已经完美完成:
Map.keys(my_map)
Run Code Online (Sandbox Code Playgroud)
通过%{is_public: true, discoverable: true}作为my_map达成交易:
iex> Map.keys(%{is_public: true, discoverable: true})
[:is_public, :discoverable]
Run Code Online (Sandbox Code Playgroud)
现在的问题是 - 如何从另一张地图构建一张地图,该地图仅具有指定的键。
幸运的是,我们标准库中有这样一个函数:Map.take
我们可以这样使用它:
Map.take(camera, [:discoverable, :is_public])
Run Code Online (Sandbox Code Playgroud)
或(在特殊情况下)
Map.take(camera, changes)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |