加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl Learning (3_1) —— 列表与数组

发布时间:2020-12-16 00:44:00 所属栏目:大数据 来源:网络整理
导读:2011-01-19 wcdj ? (1) 列表与数组 (2) 访问数组中的元素 (3) 特殊的数组索引值 (4) 列表直接量 (5) qw简写 (6) 列表的赋值 (7) pop和push操作符 (8) shift和unshift操作符 (9) 字符串中的数组内插 (10) foreach控制结构 (11) Perl的“老地方”:$_ (12) rev

2011-01-19 wcdj

?

(1) 列表与数组
(2) 访问数组中的元素
(3) 特殊的数组索引值
(4) 列表直接量
(5) qw简写
(6) 列表的赋值
(7) pop和push操作符
(8) shift和unshift操作符
(9) 字符串中的数组内插
(10) foreach控制结构
(11) Perl的“老地方”:$_
(12) reverse操作符
(13) sort操作符

(1) 列表与数组
如果说Perl的标量代表的是单数(singular),那么在Perl里代表复数(plural)的就是列表和数组。
列表(list):指的是标量的有序集合。
数组(array):指的是存储列表的变量。
更精确地说:列表指的是——数据;而数组指的是——变量。
注意:
[1] 列表的值不一定要放在数组里,但每个数组变量都一定包含一个列表(即使该列表可能是空的)。
[2] 数组和列表中的每个元素(element)都是单独的标量变量,拥有独立的标量值。
[3] 每个元素都是独立不相关的标量值,所以列表或数组可能包含数字、字符串、undef值或是不同类型标量值的混合。不过最常见的,还是让所有元素都具有相同的类型。
[4] 数组和列表可以包含任意多个元素。最少的情况是没有任何元素;最多的情况则是把可用的内存全部塞满。(Perl“去除不必要限制”的原则)

(2) 访问数组中的元素
数组元素是以连续的整数来编号,从0开始,之后的每一个元素依次加1。
注意:
[1] 数组的名字空间和标量的名字空间,是完全分开的。(C里是不允许的!在Perl中也不建议这样做)
例如:
$a[0]="wcdj";
$a[1]="gerry";
$a="yj";
print "$a[0],$a[1],$a";# 输出:wcdj,gerry,yj
[2] 如果下标是小数,则下标会自动舍去小数,无论正负。
例如:
$a[0]="wcdj";
$a[1]="gerry";
$a="yj";
print "$a[0],$a/n";
$number=1.14;
print $a[$number];# 输出:gerry
[3] 如果下标超出数组的尾端,则对应的值将会是undef。

(3) 特殊的数组索引值
如果你对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大。
例如:
$a[0]="1";# 一个元素
$a[1]="2"# 又一个
#a[4]="5"# 现在有2个undef元素
注意:
[1] 最后一个元素的索引值是:$#a。
$end=$#a;
$number_of_a=$end+1;
[2] 从数组尾端往回计数的“负数数组索引值”。超过数组大小的负数索引值是不会绕回来的。
-1是最后一个元素的索引,-2是倒数第二个元素的索引,……

(4) 列表直接量

?

(5) qw简写
在Perl程序里,经常需要建立简单的单词列表。这时只需使用qw简写,就不必键入许多索然无味的引号。

注意:
[1] 在qw构建的列表中,Perl都会将其当成单引号内的字符串来处理。
[2] 在qw构建的列表中,其中的空白字符(如空格、制表符以及换行符)会被抛弃,然后剩下的就是列表的元素。
[3] 因为qw算是一种引号,所以不能将注释放在qw列表中。
[4] Perl还允许你使用任何标点符号作为定界符(delimiter)。这符合Perl的座右铭“办法不止一种 (There's More Than One Way To Do It)”。

?

(6) 列表的赋值
注意:
[1] 就像标量值可被赋值给变量一样,列表值也可以赋值到变量。
($a,$b,$c)=(1,3);
@list9=($a,$c);
print "@list9";# 1 2 3
[2] 在Perl里互换两个变量的值相当容易。
$a=1;
$b=2;
($a,$b)=($b,$a);??? # 互换两者的值
print "$a,$b";??? # 2,1
[3] 在Perl里,要引用整个数组时,只要在数组名之前加上@字符。

?

(7) pop和push操作符
“右”-> “结尾”:
pop—删除。用来取出数组中最后一个元素,同时返回该元素的值。
push—加入。用于添加一个元素(或是一串元素)到数组的尾端。

?

(8) shift和unshift操作符
“左”-> “开头”:
shift—删除。用来取出数组中开头一个元素,同时返回该元素的值。
unshift—加入。用于添加一个元素(或是一串元素)到数组的开头。

?

(9) 字符串中的数组内插
和标量一样,数组的内容同样可以被内插到双引号串中。内插时,会在数组的各个元素之间自动添加分割用的空格。
@name=qw{wcdj gerry yj};
print "name:@name/n";#name:wcdj gerry yj
注意:索引表达式(index expression)会被当成普通字符串表达式处理。该表达式中的变量不会内插。

(10) foreach控制结构
foreach循环能逐项遍历列表中的值,依次迭代。
foreach $name (qw/wcdj gerry yj/) {
??? print "One name is $name/n";
}
注意:控制变量并不是列表元素的复制品——实际上,它就是列表元素本身。
@array=qw/wcdj gerry yj/;
foreach $name (@array) {
??? print "One name is $name/n";
??? $name .= _n;
}
print "@array/n";# wcdj_n gerry_n yj_n

(11) Perl的“老地方”:$_
假如你在foreach循环的开头省略了控制变量,Perl就会使用它的“老地方”变量$_。
foreach (1..10) { # 默认会用$_迭代
??? print "I can count to $_!/n";
}
注意:在许多情况下,当未告知Perl使用哪个变量或数值时,Perl都会自动使用$_,从而使程序员免于命名(和键入)新变量的痛苦。
例如:
$_="Hello everyone!/n";
print;# 默认打印$_

(12) reverse操作符
reverse操作符会读取列表的值(可能来自数组),并按相反的次序返回该列表。
注意:reverse会返回次序相反的列表,但它并不会修改传进来的参数。假如返回值无处可去,那这种操作也就变得毫无意义。
例如:
@array=1..5;
print "@array/n";# 1 2 3 4 5
@array=reverse(@array);
print "@array/n";# 5 4 3 2 1

(13) sort操作符 sort操作符会读取列表的值(可能来自数组),而且会根据内部的字符编码的顺序,对它们进行排序。 @array=1..5; print "@array/n";# 1 2 3 4 5 @array=reverse(@array); print "@array/n";# 5 4 3 2 1 @array=sort(@array); print "@array/n";# 1 2 3 4 5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读