perl学习笔记二----列表和数组

列表和数组
数组跟C语言中有相同之处,但是处理起来更加灵活.而列表
C语言中是没有这个概念的.
一. 列表
首先我们来看一个列表的例子.
例如 {"abc",48,$a,3.14}
perl提供一个机制可以简便列表的写法----qw,上面的例子可以写成如下的形式:
qw(abc 48 $a 3.14)
每个元素用空格分开,显然这样的写法就不适用于有空格的元素的列表.针对列表的元素在某一个范围时,perl提供了一种更加简便的写法,如下:
例如 (1..10)
     (1..10,20..40)
     (aa..zz)
     (2.1..5.3)----(2.1,3.1,4.1,5.3)
     (4.5..1.1)----()
     (3..3)----(3)
(..)也被称之为范围操作符.

二 数组
2.1 数组定义与初始化
数组的定义则不是以$打头,取而代之的是@.列表是数组的存储基础,下面是一个数组的例子。
@array1=qw(abc def gh)
如同变量我们也只讨论与C语言不相同的部分。
数组变量赋值的方式有如下几种。
@array2=qw(boy girl);
@array3=(@array3,(man,woman),male,female);
列表和数组互相复制也有如下几种形式
($a,$b,$c)=(boy,girl,man);----$a=boy,$b=girl,$c=man
($a,$b,$c)=(boy,girl);----$a=boy,$b=girl,$c 没有赋值 undef
($a,$b)=(boy,girl,man);----$a=boy,$b=girl,man空闲
($a,@b,$c)=(boy,girl,man woman);----$a=boy
    @b=qw(girl man woman)
    $c没有赋值undef
最后一种说明一旦遇到数组将剩余所有的元素分配给数组。
除了上述方式还有数组与数组间:
@array4=(man,woman,girl,boy,male,female);
@array4[0..2]=(man,girl,male);
@array4[0,1]=(man,girl);
@subarray2 = @array4[1..3]; 
    
2.2 数组的打印
下面两种格式打印结果完全不同
print @array1----abcdefgh
print "@array1"---abc def gh

2.3 获取数组的某个单元
除了与C语言相同方式还有如下一种方式
@array1[1..2]----(def gh)
     
2.4 获取数组大小
有两种方式与C语言完全不相同.
1. $#array1----2下标从0开始
2. $size=@array1----3总共有3个元素

2.5 与数组相关的库函数
(1)sort--按字符顺序排序
    @array = ("this", "is", "a","test") ;
    @array2 = sort(@array); # @array2 = ("a","is", "test", "this")
    @array = (70, 100, 8);
    @array = sort(@array); # @array = (100, 70, 8) now
(2)reverse--反转数组
    @array2 = reverse(@array);
    @array2 = reverse sort (@array);
(3)chop--数组去尾
    chop的意义是去掉STDIN(键盘)输入字符串时最后一个字符--换行符。
而如果它作用到数组上,则将数组中每一个元素都做如此处理。
    @list = ("rabbit", "12345","quartz") ;
    chop (@list); # @list = ("rabbi", "1234","quart")  now
( 4)join/split--连接/拆分
    join的第一个参数是连接所用的中间字符,其余则为待连接的字符数组。
    $string = join(" ", "this", "is","a", "string") ; # 结果为"this is a string"
    @list = ("words","and") ;
    $string = join("::", @list, "colons") ; #结果为"words::and::colons"
    @array = split(/::/,$string); # @array = ("words","and", "colons")  now

三 关联数组
为了解决普通数组的局限性----当数组很大的时候遍历起来就会很困难。perl
提供了一种新的数组关联数组。他的定义区别于普通数组以%打头,区别于普通数组的是
他的下标可以是任何值这样以来他的下标就可以没有任何顺序。
例如 %array1=(key1,value1,key2,value2,key3,value3); 
其结果是 $array1{key1}=value1,其中key1可以为任何值数字,字串变量等。可以看出关联数组的个数为偶数。
perl为了能更好把下标和值区分开来采用=〉方式,array1就可以改变成如下形式
%array1=(key1=>value1,key2=>value2,key3=>value3);
关联数组的赋值与普通数组和列表相似。
为了更好的理解关联数组引入下面这一段话:

你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。

关联数组的操作函数
1。keys(%array)操作符可生成由关联数组%array中的所有当前关键字组成的列表。即
返回奇数个元素(第1,3,5,7...个)的列表。 
2。values(%array)操作符返回由关联数组%array中所有当前值组成的列表,即返回偶
数个列表。
3。echo(%array)操作符返回由一个关键字和一个值对构成的两个元素的表。对同一数组再操作时返回下一对值直至结束。若没有更多的对时,echo()返回空表。
4。delete $ARRAY{key};delete 是 Perl 所提供的函数,作用是删除关联数组中的一个key以及这个 key 所对应的 value。使用方法是 在 delete 函数之后,指定关联数组中要删除的key名称。
5。 exists (element)在Perl5中定义,判断关联数组中是否存在某元素,若存在,返回非零值(真),否则返回零值(假)。
 

你可能感兴趣的:(perl学习笔记二----列表和数组)