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

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

发布时间:2020-12-16 00:42:49 所属栏目:大数据 来源:网络整理
导读:列表和数组 数组跟C语言中有相同之处,但是处理起来更加灵活.而列表 C语言中是没有这个概念的. 一.?列表 首先我们来看一个列表的例子. 例如?{"abc",48,$a,3.14} perl提供一个机制可以简便列表的写法----qw,上面的例子可以写成如下的形式: qw(abc?48?$a?3.14

列表和数组
数组跟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,girl);----$a=boy,$c?没有赋值?undef
($a,$b)=(boy,man空闲
($a,@b,man?woman);----$a=boy
????@b=qw(girl?man?woman)
????$c没有赋值undef
最后一种说明一旦遇到数组将剩余所有的元素分配给数组。
除了上述方式还有数组与数组间:
@array4=(man,woman,boy,female);
@array4[0..2]=(man,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","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中定义,判断关联数组中是否存在某元素,若存在,返回非零值(真),否则返回零值(假)。

?

?

?

http://blog.csdn.net/yc0188/archive/2007/05/28/1628041.aspx

(编辑:李大同)

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

    推荐文章
      热点阅读