你能为 Elixir 地图中的一个键添加多个值吗?

问题描述 投票:0回答:3

我有一个键值对映射,将特定类型的无人机与拍摄类型配对。这是一个例子:

    %{ :real_estate => "Normal", :nature => "FPV", :wedding  => "Cinewhoop" }

但是,对于 :nature 场景,除了“FPV”选项外,我还想使用“Normal”无人机。换句话说,给定 :nature,我想返回“Normal”和“FPV”。

有没有办法将多个值添加到键值对中?或者是否有不同的 Elixir 方法更适合这个问题?

我查看了文档,但没有找到执行此操作的选项。

elixir
3个回答
2
投票

Elixir 中的地图不允许重复键。如果匹配您的用例,您始终可以用值列表替换对中的值:

%{real_estate: "Normal", nature: ["Normal", "FPV"], wedding: "Cinewhoop"}

键值对列表,例如关键字列表,允许重复键:

[real_estate: "Normal", nature: "FPV", wedding: "Cinewhoop", nature: "Normal"]

不过,最后,您选择如何表示数据实际上取决于您打算如何使用它。


0
投票

或者使用与原始示例相同的语法给你一个答案,这会起作用:

%{ :real_estate => "Normal", :nature => ["Normal","FPV"], :wedding  => "Cinewhoop" }

只需使用列表作为值而不是单个字符串。


-1
投票

键值对列表,例如关键字列表,确实允许 重复键:

[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
© www.soinside.com 2019 - 2024. All rights reserved.