ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 三,列表和数组(笔记)

三,列表和数组(笔记)

原创 Linux操作系统 作者:tonykorn97 时间:2007-06-20 00:00:00 0 删除 编辑

列表(list)指的是标量的有序集会,而数组(array)则是存储列表的变量。更精确的说,列表指的是数据,而数组指的是变量。列表值可以不放

在数组里,但每个数组变量都一定包含一个列表。


1, 访问数组中的元素
数组元素是以连续的整数来编号,从0开始,之后的每一个元素一次加上1。
$fred[0] = "yabba";
$fred[1] = "dabba";
$fred[2] = "doo";
数组名本身的命名空间(namespace)和标量名称是完全分开的。你可以在同一个程序里再取一个名为$fred的标量变量,perl会将两者当成不

同的东西,而不会将其混淆。

2,特殊的数组索引值
假如你对索引值超过数组尾端的元素进行赋值,数组将会依需要自动扩大--只要有可用的内存配置给perl,数组的长度是没有限制的。必要

时,插入的元素会自动产生并设成undef值。
$rocks[0] = ' bedrock '; #一个元素。。
$rocks[1] = ' slate '; #另一个
$rocks[2] = ' lava '; #再来一个
$rocks[3] = ' crushed rock '; #再来一个
$rocks[99] = ' schist '; #产生95个undef元素

有时候,你会想找出数组里最后一个元素的索引值。对我们正在使用的数组rocks而言,最后一个元素的索引值是$#rocks.但是$#rocks并不

是元素的个数,因为还多出一个编号为0的元素。

$rocks[-1] = ' hard rock '; #最后一个元素

3,列表直接量
列表直接量(程序中用来表示列表值的方法)是圆括号内一串以逗号分隔的值,这些值构成了列表中的元素。
(1,2,3) #包含1,2,3这3个数字的列表
(1...100) #100个整数所构成的列表
上例中最后一个用到了第一次出现的范围操作符(range operator),即...。这个操作符会由左边的标量计数的右边,每次加1,以产生

一连串的数值。
列表也可以包含任何标量值。
("fred", "barney", "betty", "wilma", "dino")

4, qw简写
在perl程序里,经常需要建立简单的单词列表(如同前面的范例)。这时只需要用qw简写,便可以省去键入一堆额外引号的时间;
qw / fred barney betty wilma dino /
其实perl允许你以任何标点符号为界定符。例如:
qw # fred barney betty wilma dino #
qw { fred barney betty wilma dino }
qw [ fred barney betty wilma dino ]

5, 列表的赋值
像标量值可以赋值给变量一样;列表值也可以赋值到变量
($fred,$barney,$dino) = ("flintstone" , " rubble ", undef);
($rocks[0],$rocks[1],$rocks[2],$rocks[3]) = qw / talc mica feldspar quartz /;
当希望引用整个数组时,perl提供了一个比较简单的符号。只要在数组名之前加上@符号,就可以立即使用整个数组。这个符号在赋值操作

符的两边都可以使用。
@rocks = qw / bedrock slate lava /;
@stuff = (@rocks,undef,@rocks);
将某个数组复制到另外一个数组
@copy = @quarry;

6, pop和push操作符
pop操作符可用来取出数组中的最后一个元素并且将它返回
@array = 5...9;
$fred = pop(@array); # $fred变成9, @array现在是(5,6,7,8)
$barney = pop @array; # $barney变成8, @array现在是(5,6,7)
pop @array; # @array现在是(5,6)
和pop相反的操作符是push,它会添加一个元素(或是一串元素)到数组的尾端;
push(@array,0); # @array现在是(5,6,0)
push @array,8 # @array现在是(5,6,0,8)
push @array,1..10;
@others = qw / 9 0 2 1 0 /;
push @array,@others;

7, shift和unshift操作符
push和pop操作符所处理的是数组的尾端,相对的unshift和shift操作符则对应数组的开头

8,在字符串内替换数组
和标量一样,数组值可以被替换到双引号内的字符串里。数组中的相邻元素在替换时会自动添加空格作为换行符。
数组的单一元素在替换是被替换成相应的元素值。

9,foreach控制结构
能够一次处理整个数组或列表相当的方便,所以perl提供了一种控制结构来做这件事,foreach循环会逐项处理列表的值,每次对一个值执

行循环里的操作:
foreach $rock (qw/ bedrock slate lava /){
print "one rock is $rock. ";
}

10,perl最爱的默认变量:$_
假如你在foreach循环的开头省略了控制变量,perl会使用它最爱的默认变量,$_.
foreach (1..10){
print "I can count to $_! ";
}

11, reverse操作符
reverse操作符会读取列表的值(可能来自数组)并依相反的次序返回该列表
@fred = 6..10;
@barney = reverse(@fred);
@fred = reverse @fred;

12, sort操作符
sort操作符会读取列表的值(可能来自数组),而且会根据字符编码的顺序对它们进行排序。

13,强制指定标量上下文
使用假函数scalar,它并不是真正的函数,因为它只是告诉perl必须提供标量上下文。

14,列表上下文中的
在标量上下文中会返回输入数据的下一行;在列表上下文中,则会返回剩余的各行。
@lines = ; #在列表上下文中读取标准输入
chomp(@line); #忽略所有的换行符

简洁的方法:
chomp (@lines = ); #读取所有数据行,但不包含换行符

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/312079/viewspace-245687/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-05

  • 博文量
    1854
  • 访问量
    2088836