基本构建的堆栈:列表与数组
在本章中将要学习:(1)如何填充和清空数组 (2)如何逐个元素查看数组 (3)如何对数组进行排序和输出 (4)如何将标量分割成数组,以及如何将数组重新合并成标量。
一、将数据放入列表和数组
(5,'apple', $x , 3.14) 这就是个列表的例子
如果列表只包含简单的字符串,而用单引号将每个字符串括起来又太麻烦,那么就可以用qw运算符
qw(apples oranges 45.6)
上面代码的意思就是跟这个代码一样
('apple','oranges','45.6','$x')
范围运算符 (1..10) 构成一个包含1到10之间的所有数的列表
=======================================
二、数组
@boy=qw(greg petter bobby)
数组赋值也可以包含其他数组甚至空列表
@copy=@origina;
@clean=();
在这里,@original数组的所有元素都被拷贝到新数组@copy中。如果@copy中原先已经拥有元素,那么这些元素就会丢失。
($a , $b, $c)=qw(apple oranges bananers)
在这个例子中,$a被初始化为apple $b被初始化为oranges
=============================================
从数组中取出元素
若要获得整个数组的内容,最简单的方法是使用双引号中的数组
print "@array";
若要访问一个元素,用$array[index]
还可以将数组划分成分组,称为片 ,使用@标号
@conifers=@trees[5,7]
====================================================
寻找结尾
perl提供两个机制,第一个方法是个特殊变量,其形式是$#arrayname.
@trees=qw(oak cedar maple apple)
print $#trees 输出3
$size=@array 将@array中的元素数量放入$size中 为4
$array[-1] 是@array得最后一个元素 -2倒数第二个元素
==========================================================
对数组进行操作
@flavors=qw(chocolate vanilla strawberry mint)
for ($index=0;$index<@flavors;$index++) {
print "my favorite is $flavors[$index] and .....";
}
$index被初始化为0,并且按1进行递增,直到到达@flavors. 请记住,@flavors是标量上下文计算的,结果为4.
foreach $cone (@flavors) {
print "I'd like a cone of $cone\n";
}
在这个代码中,变量$cone设置为@flavors中的各个值。
==========================================================
在数组与标量之间进行转换
将标量转换成数组的方法之一是使用split函数。split函数拥有一个模式和一个标量。
@words=split(/ /, "The quick brown fox");
while (<STDIN>) {
($firstchar)=split(//, $_);
print "The first character was $firstchar";
}
@music=('white abum,beatles',
'graceand,paul simon');
foreach $record (@music) {
($record_name,$artist)=split(/,/, $record);
}
若要用数组来创建一个标量,也就是进行split的反向操作,可以使用join函数。
$number=join(',' , (1..10));
将字符串1,2,3,4,5,6赋予变量$number
================================================
给数组重新排序
sort函数将一个列表作为参数,并且大体上按照字母顺序对列表进行排序
@chiefs=qw(Clinton Bush Reagan Carter Ford Nixon);
print join(' ' , sort @chiefs);
默认排序次序是ASCII顺序,不能按数值排序
如何按数值大小排序呢?
假设@numbers是包含了许多数字值得数组
@sorted=sort {$a<=>$b;} @numbers;
如果$a小于 等于 大于$b, 则返回 -1 0 1
若要比较字母字符串,请使用cmp运算符。
==============================================
reverse函数能够对字符串的字符进行倒序操作
@lines=qw(I do not like green eggs and ham);
print join(' ' , reverse @lines);