【发布时间】:2017-01-01 20:49:33
【问题描述】:
我有一个enum,我正在使用group_by。
Enum.group_by(my_list, fn x -> x.param end)
结果是它按param 值分组。我想快速进行模式匹配,所以我有:
%{"a" => a, "b" => b, "c" => c } = Enum.group_by(my_list, fn x -> x.param end)
但是当列表缺少“a”、“b”或“c”作为参数时,这会遇到问题。
请注意,我可以将它设置为一个变量,如果我访问它并且它不存在,它将导致 nil:
grouped = Enum.group_by(my_list, fn x -> x.param end)
grouped["a"] # this will show as nil or the result if it exists
但为了可读性,我只想进行模式匹配并使用变量。这是 Elixir 不支持的东西吗?
【问题讨论】:
-
模式匹配将因缺少键而失败。您可以将
%{"a" => nil, "b" => nil, "c" => nil}与Enum.group_by的结果合并,但这可能比您提到的替代方案更糟糕。您还可以创建一个类似于Map.take的函数,它返回给定键处的值,如果键不存在则返回nil,并像这样使用它:[a, b, c] = my_take(Enum.group_by(...), ["a", "b", "c"])。 -
您要求的东西不受支持,但也许如果您稍微扩展您的问题(您想对数据做什么?为什么要让
nils 回来?输入列表是什么样的?)您可以获得一些更广泛的建议。
标签: elixir