我正在尝试将某些字段从关键字列表中删除。我已经尝试过了,但是卡住了。我在做什么错了?
> Type: Item
> Total: 2
> Item Type: Head
Property List: ['Stat1', 'Stat3']
编辑:
预期输出为:
[what: "country", url: "asdf", matches: "AQ"]
|> Enum.map(fn([:what, :url, :matches]) -> [:what, :url] end)
答案 0 :(得分:3)
当您在关键字列表上调用Enum.map
时,您将一一遍历元组{key, value}
。导致错误** (FunctionClauseError) no function clause matching
。
这取决于您想要的结果。如果您希望将关键字列表的一部分作为关键字列表,则可以
[what: "country", url: "asdf", matches: "AQ"]
|> Keyword.take([:what, :url])
哪个将返回[what: "country", url: "asdf"]
如果您想要使用地图作为结果,则可以使用@ denis.peplin上面建议的解决方案
如果出于某些原因您仍然想要或需要使用Enum.map
和模式匹配来进行此操作,则可以执行以下操作:
[what: "country", url: "asdf"]
|> Enum.map(fn
{k, _v} = tup when k in [:what, :url] -> tup
_ -> nil
end) |> Enum.reject(&is_nil/1)
答案 1 :(得分:1)
[what: "country", url: "asdf", matches: "AQ"]
|> Map.new()
|> Map.take([:what, :url])
我不确定这是最惯用的方式。您是否希望将关键字列表作为输出?
编辑:
答案是在对问题进行编辑之前发布的,因此现在它并不十分相关。
如果需要将关键字列表作为输出,请改用Keyword.take
。