我有一个键值对映射,将特定类型的无人机与拍摄类型配对。这是一个例子:
%{ :real_estate => "Normal", :nature => "FPV", :wedding => "Cinewhoop" }
但是,对于 :nature 场景,除了“FPV”选项外,我还想使用“Normal”无人机。换句话说,给定 :nature,我想返回“Normal”和“FPV”。
有没有办法将多个值添加到键值对中?或者是否有不同的 Elixir 方法更适合这个问题?
我查看了文档,但没有找到执行此操作的选项。
Elixir 中的地图不允许重复键。如果匹配您的用例,您始终可以用值列表替换对中的值:
%{real_estate: "Normal", nature: ["Normal", "FPV"], wedding: "Cinewhoop"}
键值对列表,例如关键字列表,允许重复键:
[real_estate: "Normal", nature: "FPV", wedding: "Cinewhoop", nature: "Normal"]
不过,最后,您选择如何表示数据实际上取决于您打算如何使用它。
或者使用与原始示例相同的语法给你一个答案,这会起作用:
%{ :real_estate => "Normal", :nature => ["Normal","FPV"], :wedding => "Cinewhoop" }
只需使用列表作为值而不是单个字符串。
键值对列表,例如关键字列表,确实允许 重复键:
[real_estate: "Normal", nature: "FPV", wedding: "Cinewhoop", nature: "Normal"]
嗯,不。用于“关键字列表”的语法是创建二元组列表的快捷方式。显然,一个列表可以有任意多的二元组。没有“重复键”,因为 2 元组列表没有键。
iex(7)> [a: 1, b: 2, a: 2] === [{:a, 1}, {:b, 2}, {:a, 2}]
true