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

能否在Elixir Map中为单个键配置多个值?

Elixir中处理多值Map场景的方案
  • 直接修改Map值为列表(最直观的方案)
    把原Map的每个值都改成列表形式,统一存储单个或多个无人机类型,后续获取时无需额外判断格式:

    drone_map = %{
      :real_estate => ["Normal"],
      :nature => ["FPV", "Normal"],
      :wedding => ["Cinewhoop"]
    }
    
    # 获取指定场景的无人机类型
    Map.get(drone_map, :nature) # 返回 ["FPV", "Normal"]
    Map.get(drone_map, :real_estate) # 返回 ["Normal"]
    

    这种方式结构统一,后续处理逻辑可以直接遍历列表,不用区分单个值和多个值的情况。

  • 保留原Map结构,通过函数扩展逻辑
    如果不想改动原Map的初始结构,可以写一个封装函数,针对特定场景返回多值,同时统一返回格式为列表:

    def get_drone_types(scene) do
      base_map = %{ :real_estate => "Normal", :nature => "FPV", :wedding  => "Cinewhoop" }
      case scene do
        :nature -> ["FPV", "Normal"]
        _ -> List.wrap(Map.get(base_map, scene))
      end
    end
    
    # 调用示例
    get_drone_types(:nature) # 返回 ["FPV", "Normal"]
    get_drone_types(:wedding) # 返回 ["Cinewhoop"]
    

    List.wrap/1会把单个值转换成包含该值的列表,确保所有场景的返回格式一致。

  • 使用模式匹配直接返回结果
    如果场景数量不多且固定,直接用模式匹配写函数会更简洁:

    def get_drone_types(:nature), do: ["FPV", "Normal"]
    def get_drone_types(:real_estate), do: ["Normal"]
    def get_drone_types(:wedding), do: ["Cinewhoop"]
    def get_drone_types(_), do: [] # 处理未知场景
    

    这种方式逻辑一目了然,调用时直接匹配对应的场景返回结果。

内容的提问来源于stack exchange,提问作者MrBuchmas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:06