📜  Elixir-列表和元组(1)

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

Elixir-列表和元组

在 Elixir 中,列表和元组都是非常常见的数据类型。它们分别有不同的特点和用途。

列表

列表是一种动态数组,在 Elixir 中,它以方括号 [] 包围元素,元素之间用逗号隔开。列表中的元素可以是任何类型的值,也可以为空。

创建列表

我们可以用以下两种方式来创建一个列表:

list = [1, 2, 3, 4, 5]

another_list = ["abc", true, :elixir, 42]
访问和操作列表

你可以使用下标来访问列表中的元素。需要注意的是,下标是从 0 开始的:

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

通过 [head | tail] 的形式来访问列表中的头部和尾部。

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

对于列表,++ 运算符可以将两个列表拼接在一起,-- 运算符可以将一个列表中的元素移除(指定元素,而非位置):

iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
iex> [1, 2, 3, 4] -- [3, 4]
[1, 2]
iex> [1, 2, 2, 2, 3] -- [2]
[1, 2, 2, 3]
列表推导式

与 Python 一样,Elixir 也支持使用列表推导式来创建列表。它的语法类似于 SQL 的查询语句。

iex> list = [1, 2, 3, 4, 5]
iex> for n <- list, rem(n, 2) == 0, do: n * n
[4, 16]

上述代码将列表中的所有偶数平方,并返回一个新的列表。

元组

元组是有序列表,每个元素可以是任何类型的值。元组使用花括号 {} 包围元素,各元素用逗号隔开。在元组中,元素的位置决定了它们的含义。

创建元组

我们可以用以下两种方式来创建一个元组:

tuple = {1, "abc", true, :elixir}

也可以使用 tuple_size/1 函数获取元组的大小:

iex> tuple = {:ok, "hello"}
iex> tuple_size(tuple)
2
访问和操作元组

在创建元组后,我们可以使用模式匹配来访问其中的元素。

iex> tuple = {:ok, "hello"}
iex> {:ok, text} = tuple
iex> text
"hello"

与列表不同,元素的位置显然很重要,因为它决定了元素的含义。但即便如此,你也可以使用 elem/2 函数来获取元组中指定位置的元素。

iex> tuple = {:ok, "hello"}
iex> elem(tuple, 1)
"hello"

与列表不同,元组是不可变的,因此无法添加、修改或删除元素。

总结

列表和元组是 Elixir 中最常见的两种基本数据类型。它们都可以包含任何 Elixir 值,但它们之间的不同点很清楚:列表是动态的,元组是静态的,即列表可以被修改,而元组不行。此外,与列表不同的是,元组的元素位置决定了它们的含义。请在你的项目中合适地使用这两种数据类型。