Mul*_*vil 10 erlang element list edit
我有一个列表,我使用了函数列表:nth()on返回某个索引处元素的值.有谁知道我怎么能编辑这个值?
任何帮助都会很棒
谢谢
标记.
编辑:这里有更多的信息.假设我有一个列表L,它代表一行基于文本的网格
L = [H,H,H,H,H].
Run Code Online (Sandbox Code Playgroud)
我想访问一个指定的元素,例如第三个,然后将其更改为E.然后,如果我再次使用列表L,那么它将是
[H,H,E,H,H]
我希望这更有意义.
谢谢.
E D*_*que 18
列表是不可变的,因此您无法"更改"列表中的项目.如果您确实想要替换给定位置的项目,则应在具有(已更改)元素和剩余列表的元素之前附加列表:
1> L=[1,2,3,4,5].
[1,2,3,4,5]
2> lists:sublist(L,2) ++ [lists:nth(3,L)*100] ++ lists:nthtail(3,L).
[1,2,300,4,5]
Run Code Online (Sandbox Code Playgroud)
编辑:情况有点不寻常,但是......你手头有特定的问题吗?也许它可以用例如列表更好地表达:地图?
rvi*_*ing 11
虽然使用函数lists可能会导致代码看起来更清晰但效率较低,因为要更改的元素之前的元素列表将被复制两次.自己编写函数效率更高,因为您可能会lists在函数中使用代码来包装代码,但我觉得它不太清楚.
而不是@ D.Nibon的代码,我会将函数编写为:
%% setnth(Index, List, NewElement) -> List.
setnth(1, [_|Rest], New) -> [New|Rest];
setnth(I, [E|Rest], New) -> [E|setnth(I-1, Rest, New)].
%% Can add following caluse if you want to be kind and allow invalid indexes.
%% I wouldn't!
%% setnth(_, [], New) -> New.
Run Code Online (Sandbox Code Playgroud)
可以讨论参数顺序; 遗憾的lists是,模块在这里没有帮助,因为它在模块中是不一致的.虽然这不是尾递归函数,但我觉得它更清晰.效率的差异很小或根本不存在,所以我会明确地说.有关此问题的详细信息,请参阅:
http://www.erlang.org/doc/efficiency_guide/myths.html#tail_recursive
http://www.erlang.org/doc/efficiency_guide/listHandling.html#id64759
对于更通用的函数而不仅仅是新值,您可以传递一个fun将使用旧值调用并返回新值.在图书馆,我可能会同时拥有两者.
| 归档时间: |
|
| 查看次数: |
11270 次 |
| 最近记录: |