首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将新元素添加到列表

将新元素添加到列表
EN

Stack Overflow用户
提问于 2016-02-21 04:53:16
回答 5查看 77.3K关注 0票数 53

我尝试将一个新元素添加到列表中,如下所示:

代码语言:javascript
复制
iex(8)> l = [3,5,7,7,8] ++ 3
[3, 5, 7, 7, 8 | 3]
iex(9)> l
[3, 5, 7, 7, 8 | 3]

为什么我会排在第五位呢?

代码语言:javascript
复制
8 | 3

这是什么意思?

如何向列表中添加新元素?

--------Update

我尝试按如下方式循环执行该列表:

代码语言:javascript
复制
iex(2)> l = [1,2] ++ 3
[1, 2 | 3]
iex(3)> Enum.each(l, fn(x) -> IO.puts(x) end)
1
2
** (FunctionClauseError) no function clause matching in Enum."-each/2-lists^foreach/1-0-"/2
    (elixir) lib/enum.ex:604: Enum."-each/2-lists^foreach/1-0-"(#Function<6.54118792/1 in :erl_eval.expr/5>, 3)
    (elixir) lib/enum.ex:604: Enum.each/2

由于数字2的指针不是指向列表,而是指向值3,我如何循环该列表?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-21 05:06:22

++运算符用于连接两个列表,然后您可能想要做的是添加一个新元素,将其放在一个列表中。然后,我认为您应该将这3个添加到另一个列表中:

iex(2)> l= 3,5,7,7,8 ++ 3

票数 55
EN

Stack Overflow用户

发布于 2017-05-09 12:38:57

只需遵循Elixir文档将一个元素添加到列表中(并牢记性能= ):

代码语言:javascript
复制
iex> list = [1, 2, 3]
iex> [0 | list]   # fast
[0, 1, 2, 3]
iex> list ++ [4]  # slow
[1, 2, 3, 4]

https://hexdocs.pm/elixir/List.html

票数 69
EN

Stack Overflow用户

发布于 2016-02-22 20:59:47

First: 1,2|3是improper list的符号。

其次:要对不正确的列表执行Enum.each,代码将如下所示:

与适当/不适当的列表进行

匹配相应地很容易。因此,正确列表的长度函数len:

len(_|T) -> 1+ len(T);len([]) -> 0。其中我们显式匹配终止[]。如果给出了一个不正确的列表,这将生成一个错误。而返回列表最后一个尾部的函数last_tail也可以处理不正确的列表:

last_tail(_|T) -> last_tail(T);last_tail( Tail ) -> Tail。

%将匹配任何尾部

当然,这就是Erlang code from @rvirding。翻译成Elixir并翻译成你在示例中给出的打印,它看起来像这样:

代码语言:javascript
复制
iex(6)> defmodule T do
...(6)>   defp print([h|t]) do
...(6)>     IO.puts(h)
...(6)>     print(t)
...(6)>   end
...(6)>   defp print(t) do
...(6)>     IO.puts(t)
...(6)>   end
...(6)>   def print_improper_list(il), do: print(il)
...(6)> end
iex:6: warning: redefining module T
{:module, T,
 <<70, 79, 82, 49, 0, 0, 5, 136, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 161, 131, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95, 118, 49, 108, 0, 0, 0, 4, 104, 2, ...>>,
 {:print_improper_list, 1}}
iex(7)> T.print_improper_list([1,2,3|4])
1
2
3
4
:ok

我把它留给您作为练习,让您弄清楚如何使用Enum.each来做到这一点。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35528875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档