elixir - 如何根据 Struct Elixir 中的键获取值
问题描述
我有这个价值
%{is_public: true, discoverable: true}
这可以是任何不具体的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>,
}
我想在ieCamera
的基础上从结构中获取值Map
iex(4)> changes = %{is_public: true, discoverable: true} |> Map.keys
[:discoverable, :is_public]
我可以从更改地图中获取密钥Map.keys
但我不确定如何从 Camera 结构映射值。
从上面的Camera Struct和改变地图,我想得到这种类型的地图。
%{
is_public: true,
discoverable: true
}
看起来与上面的地图相同,但它取决于 Camera Struct 值,它们都可以是 false 或 true ,与 id、exid、is_online 相同。
如果我这样做
Enum.map(changed_keys, fn(key) ->
key: Map.get(camera, key)
end)
这仍然不起作用,任何帮助都是可观的。谢谢
我只想在changes
Map 中使用匿名键创建一个映射,然后从Camera
Struct 获取它们的值并使用这些值和匿名键创建一个新映射。
解决方案
第一项任务是提取所需的密钥 - 它已经完美地完成了:
Map.keys(my_map)
通过%{is_public: true, discoverable: true}
作为my_map
达成交易:
iex> Map.keys(%{is_public: true, discoverable: true})
[:is_public, :discoverable]
现在,问题是 - 如何从另一个地图构建一个只有指定键的地图。
幸运的是,我们在标准库中有这样一个函数:Map.take
我们可以这样使用它:
Map.take(camera, [:discoverable, :is_public])
或(在特定情况下)
Map.take(camera, changes)
推荐阅读
- python - 如何向 pubsub 回调添加参数
- google-chrome - 在 Heroku 服务器上将大型 HTML 文件转换为 PDF 时,无头 Chrome 崩溃
- .net - .net 4.8:'的类型初始化器
' 抛出异常 - excel - 如何复制数据透视表的第一列和最后一列的值?
- python - Django - 我如何复制同一类中的字段
- reactjs - React hooks - useEffect 方法不断获取
- c# - 如何在 LINQ 查询中使用从 Request.Query 获得的多值/数组参数(枚举值)?
- r - 在 Linux 上升级 R 时会删除软件包吗?
- javascript - 从 React 数组中过滤过期卡片
- json - 如何从clojure中的字符串中获取每个json对象?