Dictionary 如何检查Elixir中深度嵌套的映射中是否存在密钥
我有一个映射对象,我需要检查它是否包含给定的键。我试着像下面这样,但它总是返回错误。还有如何在内部映射回复消息上提取值Dictionary 如何检查Elixir中深度嵌套的映射中是否存在密钥,dictionary,elixir,Dictionary,Elixir,我有一个映射对象,我需要检查它是否包含给定的键。我试着像下面这样,但它总是返回错误。还有如何在内部映射回复消息上提取值 map=%{ Envelope: %{ Body: %{ replyMessage: %{ cc: %{ "amount" => "100.00", "reasonCode" => "100",
map=%{
Envelope: %{
Body: %{
replyMessage: %{
cc: %{
"amount" => "100.00",
"reasonCode" => "100",
},
decision: "ACCEPT",
invalidField: nil,
purchaseTotals: %{"currency" => "CAD"},
reasonCode: "100",
}
}
}
}
Map.has_key?(map, %{Envelope: %{Body: %{replyMessage: replyMessage}}})= false
您有两种可能:检查键是否存在和/或深入检索值
iex | 1▶ 匹配?({信封:%{正文:%{回复邮件:{},映射)
#⇒真的
iex | 2▶ 获取(映射,[:信封,:正文,:回复消息])
#⇒ %{
#抄送:%{“金额”=>“100.00”,“原因代码”=>“100”},
#决定:“接受”,
#无效场:零,
#采购总额:%{“货币”=>“加元”},
#理由代码:“100”
# }
小心内核。get_in/2
将返回nil
,如果该键存在,但具有nil
值,或者该键不存在
它不是递归的,它使用映射的键,作为参数传递;也就是说,只有第一级
旁注:根据
Map.has_key/2
defmodule Deep do
@规范有_键?(map::map(),键::[atom())::布尔()
def有_键?(map,_)当不是_键(map)时,do:false
def有_键?(map,[key]),do:map.has_键?(map,key)
def有U键?(映射,[键|尾],
do:Map.has_键?(Map,键)和has_键?(Map[键],尾)
结束
Deep.has_key?(map,[:信封,:Body,:replyMessage])
#⇒真的
谢谢您的回复。我使用的get_in()如下所示。但我认为这是一场比赛?对我来说更有用。case_value=get_in(map,[:信封,:Body,:replyMessage])do nil->map value->value end我该如何订阅你的答案@aleksei matiushkin?@peaclejames我怀疑这在这里是不可能的,但还是谢谢你,我很感激。我有一个博客,elixir RSS在这里: