📜  Elixir 列表 - Elixir (1)

📅  最后修改于: 2023-12-03 15:30:36.827000             🧑  作者: Mango

Elixir 列表

Elixir 是一种基于 Erlang 虚拟机 OTP 平台的函数式编程语言,它是一种动态的、可扩展的、可容错的语言。Elixir 的标准库包含了许多有用的函数和数据结构,其中包括列表。

列表

列表是 Elixir 中最基本的数据结构之一,它是一种有序的集合,其中每个元素只能出现一次。列表是不可变的,这意味着一旦创建,就不能修改它的内容。

创建列表

可以使用中括号将元素组合成列表。

iex> list = [1, 2, 3, 4]
[1, 2, 3, 4]

也可以使用枚举器 Enum.to_list/1 将枚举器转换成列表。

iex> list = Enum.to_list(1..4)
[1, 2, 3, 4]
访问列表

可以使用元素索引访问列表。

iex> list = [1, 2, 3, 4]
[1, 2, 3, 4]
iex> list[0]
1
iex> list[3]
4

但需要注意,索引必须是非负整数。如果使用负数索引,则会抛出 IndexError 异常。

iex> list[-1]
** (ArgumentError) argument error
    (stdlib 3.14.2) :ets.lookup_element(#MapSet<[]>, -1, #Function<51.32260581/1 in :erl_eval.expr/5>)
列表操作

除了常规的列表操作(如 length/1concat/2 等),Elixir 还提供了许多方便的切片和匹配操作。

切片

可以使用切片操作 [start..end] 来截取列表的一部分。

iex> list = [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
iex> list[1..3]
[2, 3, 4]

需要注意,切片操作是包含起始位置和结束位置的。如果只想获取列表的一部分,可以使用 Enum.take/2Enum.drop/2 函数。

iex> list = [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
iex> Enum.take(list, 2)
[1, 2]
iex> Enum.drop(list, 2)
[3, 4, 5]

匹配

在 Elixir 中,可以使用匹配操作符 = 将列表的头部和尾部分别绑定到变量中。

iex> [head | tail] = [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
iex> head
1
iex> tail
[2, 3, 4, 5]

排序

可以使用 Enum.sort/1 函数对列表进行排序。

iex> list = [3, 2, 1, 5, 4]
[3, 2, 1, 5, 4]
iex> Enum.sort(list)
[1, 2, 3, 4, 5]
列表推导式

Elixir 中支持列表推导式,可以使用列表推导式创建新的列表。

iex> for x <- [1, 2, 3], y <- [4, 5, 6], x + y == 7 do
...>   {x, y}
...> end
[{1, 6}, {2, 5}, {3, 4}]
总结

列表是 Elixir 中最基本的数据结构之一,它是一种有序的集合。Elixir 为列表提供了许多方便的操作,如切片、匹配和排序等。列表推导式提供了一种简单的方式来创建新的列表。