You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:54:05