📅  最后修改于: 2023-12-03 15:30:36.879000             🧑  作者: Mango
在 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 值,但它们之间的不同点很清楚:列表是动态的,元组是静态的,即列表可以被修改,而元组不行。此外,与列表不同的是,元组的元素位置决定了它们的含义。请在你的项目中合适地使用这两种数据类型。