[英]How do I apply a function to just one element of a Keyword list?
假设我有一个关键字列表,如下所示:
[a: 1, b: 2, c: 3...]
我想返回一个如下的关键字列表:
[a: f(1), b: 2, c: 3...]
其中f/1
是我应用于元素:a
的函数。
列表的长度或顺序不确定。
最好的方法是什么?
谢谢!
应用于第一个元素:
iex(1)> [{key, value} | tail] = [a: 1, b: 2, c: 3]
[a: 1, b: 2, c: 3]
iex(2)> fun = fn(num) -> num + 1 end
#Function<6.128620087/1 in :erl_eval.expr/5>
iex(3)> [{key, fun.(value)} | tail]
[a: 2, b: 2, c: 3]
如果顺序和长度不确定,我建议您先翻译成地图。
如果列表很小,则可以一个一个地循环遍历元素并匹配:a
来运行函数。
您可以使用Keyword.update!/3
或Keyword.update/4
:
list = [a: 1, b: 2, c: 3]
Keyword.update! list, :a, &(&1+1)
您也可以使用Kernel.update_in / 3 (除了Keyword.update!解决方案之外)
list = [a: 1, b: 2, c: 3]
Kernel.update_in list, [:a], fn(value) -> value end
fn
部分由您决定如何转换价值。
编辑
如果关键字列表中有多个:a
键,则可以将Enum.map/2用作:
list = [a: 1, b: 2, c: 3, a: 4]
Enum.map list, fn {:a, v} -> {:a, v+1}; {k,v} -> {k,v} end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.