能否在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
相关产品推荐
相关产品推荐

