数组

数组 属于 Perl

1 个练习

关于 数组

数组和列表包含一个有序的标量集合。 除了使用引用(这会在另一个概念中介绍)之外,这意味着数组和列表始终是扁平的,也就是说,它们不能包含其他数组或列表。

大多数情况下,列表由括号 () 包围,其中的元素用逗号 , 分隔。

数组变量通常通过把列表赋值给它来填充,例如my @names = ('Alice', 'Bob', 'Charlie');。

可以通过下标指定索引来访问数组或列表的元素,例如('Alice', 'Bob', 'Charlie')[1] # 'Bob'。

Perl 中的索引从 0 开始。 负索引会从数组或列表的末尾开始计数,例如('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'。

函数

有许多函数可用于操作数组和列表,其中最有用的一些是 grep(生成一个由匹配条件的元素组成的新列表)、map(把元素转换成一个新的值列表)和 sort(生成一个重新排序的元素列表)。

用于操作数组的函数包括 push(在末尾添加元素)、pop(移除最后一个元素)、shift(移除第一个元素)、unshift(在开头添加元素)以及 splice(进行更复杂的修改)。

你还会经常遇到使用 for(each) 语句遍历数组和列表的情况。

符号差异

访问数组的元素时,所用的符号决定了结果。 变量名末尾的下标 [] 告诉 Perl,你正在访问以该名字命名的数组。

my @names = ('Alice', 'Bob', 'Charlie');

$names[0]; # 'Alice'      <- A scalar
@names[0]; # ('Alice')    <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice

$names[1, 2]; # 'Charlie'                <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie')       <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice

虽然允许这样做,但为了可读性,建议不要让不同类型的变量共用同一个名字。

数组与列表

数组和列表有许多相似之处,在很多地方可以互换使用,但它们并不是一回事。 列表是固定且不可变的标量集合。 数组是可变的标量集合,其内容和数组本身的大小都可以改变。

在某些上下文中,它们的行为不同。 在标量上下文中使用数组,会得到数组的大小。 在标量上下文中使用列表,会得到列表中的最后一个元素,还可能出现一些警告,提示其余内容被用在空上下文中。

my @names = ('Alice', 'Bob', 'Charlie');

scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).

更多内容请参阅以下常见问题解答:列表和数组有什么区别?

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 数组

练习已锁定

再解锁 10 个练习即可练习 数组