如何在Elixir的map列表中通过模式匹配获取指定map的字段值
解决方案
你的数据是Eagle.Content.TemplateFields.TemplateField结构体组成的列表,不是Map,不能直接用变量[键]的方式访问,你可以按需选择以下两种实现方式:
方式1:固定取第二个元素的name值
列表索引从0开始计数,第二个元素对应索引1,直接通过Enum.at取索引对应元素再读取name字段即可:
x = landing_page.template.fields |> Enum.at(1) |> Map.get(:name)
如果确定列表一定存在第二个元素,也可以简写为:
x = Enum.at(landing_page.template.fields, 1).name
方式2:按name字段匹配查找(不受列表顺序影响)
如果你想不依赖列表排序,只要找到name为Meta description的元素就取对应值,可以用Enum.find做匹配:
x = landing_page.template.fields # 匹配name为指定值的元素 |> Enum.find(fn field -> field.name == "Meta description" end) # 读取name字段,第二个参数为找不到时的默认值,可自定义调整 |> Map.get(:name, "未找到匹配字段")
原代码错误原因
你写的landing_page.template.fields[%{name: "Meta description"}]是Map的键值访问语法,仅支持key为%{name: "Meta description"}的Map结构使用,你的数据是列表,所以无法生效。
内容的提问来源于stack exchange,提问作者Borybar
相关产品推荐
相关产品推荐

