繁体   English   中英

如何将功能仅应用于关键字列表的一个元素?

[英]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!/3Keyword.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM