Perl学习之三:数组与列表

    技术2022-07-02  84

    一、列表

       1、列表:标量的有序集合,列表中元素可以是任意标量。

        例:

    (3, 4, 5)       #包含数值3、4、5的列表(3, 4, 5,)      #同上,末尾逗号会被忽略('a', "b", 3.4) #字符和数字组合的列表   (1..3)           #相当于(1, 2, 3) (1.3..3.6)     #同上,小数部分会忽略掉(0, 2..5, 8)   #相当于(0, 2, 3, 4, 5, 8)(3..1)           #空列表,指向上计数( )               #空列表 ($x+$y, $y)   #列表中元素也可以是表达式、变量($x..$y)        #由$x和$y的值来决定(0, $#arr )    #数组arr的所有索引数字

        2、qw简写

    在字符串列前表加qw来代替字符串中的引号,且列表中的元素用空白隔开,空白字符会被忽略

        例:

        qw(a abc cd)   #相当于('a', 'abc', 'cd')

        qw(a   abc

                     cd)   #同上

    用qw简写时,列表中的字符串当做单引号字符串处理,因此不能像双引号字符串一样使用/n和变量内插

        例:

        qw(a abc cd  /n)   #不会回车换行

    qw可以用除了()之外的任意限定符,但左右限定符必须成对出现

        例:

         qw!   hello  word/!    !  #相当于('hello', 'world!')

        qw#  hello  word      #  

        qw{   hello  word      }

        qw<   hello  word     >

        qw[    hello  word      ] 

        3、列表赋值

    ($a,  $b, $c) = (1, 2, 3)     #将1、2、3分别赋值给$a,  $b, $c ($a,  $b) = ($b,  $a)         #互换a、b的值($a,  $b) = qw(aa, bb, cc#'aa'赋值给$a,'bb'赋值给$b,'cc'被忽略($a,  $b) = qw(aa)           #'aa'赋值给$a,$b被设为undef

    二、数组   

       1、数组:存储列表的变量,数组变量以@打头, 数组变量的初始值为空列表()

        2、数组赋值

    {$arr[0], $arr[1]} = qw/aa  bb/  #将字符串aa,bb分别赋值给数组arr的第0个和第1个元素@arr = qw/aa  bb/                    #同上@em = ( );                         @b = 1..3                               #相当于@b = (1, 2, 3)@all = (@arr, @empty, 'cc')       #相当于@all = ('aa', 'bb', 'cc'),数组中不能包含数组,因此@arr被展开。@em为空,所以此数组包含三个元素@arr = @all                            #相当于@arr=('aa', 'bb', 'cc')@all = @arr                            #相当于@all=('aa', 'bb'),将一个数组赋值给另一个数组时,被赋值的数组将会被完全覆盖

         3、数组索引

    $a[0] = 'index'           #数组下标从0开始      $a[1.7-1]                  #相当于$a[0]任何结果为数字的表达式都可以作为数组下表,下表只取结果的整数部分$a[$#a]                    #数组a最后一个元素$a[-1]                                  #同上,-1表示数组最后一个元素索引,-2表示倒数第二个索引,依次类推

    三、操作函数

    pop函数:删除数组中最后一个元素,同时返回该元素的值

         例:

         @array = 1..3;          

        $t1 = pop (@array);    #$t1= 2,@array = (1,2)

        $t2 = pop  @array;     #pop后面可以不加括号,只要不会因为拿掉括号而改变原意,则括号可以省略

        pop  @array;              #现在@array变为空

        $t3 = pop  @array;     #因为@array为空,所以pop什么都不做

    push函数:添加一个元素到数组末尾

         例:        

        push (@array, 1);       #array = (1)

        push @array, 2;         #push后面可以不加括号,只要不会因为拿掉括号而改变原意,则括号可以省略

        push @array, 3..5;     #现在@array变为空(1, 2, 3, 4, 5)

        push @other, 6..8;     

        push @array, @other;#因为@array变为空(1, 2, 3, 4, 5, 6, 7, 8)

    shift函数:删除数组中第一个元素,同时返回该元素的值    

          用法同pop函数

     

    unshift函数:添加一个元素到数组开头      

         用法同push函数 

     

    reverse函数:将列表中的元素逆序排列并返回排序后的列表

         例:        

        @arr = 6..10;             

        @temp = reverse @arr;   #@arr变为(10, 9, 8, 7, 6)   

        @temp = reverse 6..10;  #同上,@arr变为(10, 9, 8, 7, 6)  

        @arr = reverse @arr ;     #@arr被倒序

        reverse @arr                  #@arr没有被修改,因为返回值无处可去

    sort函数:根据字符编码顺序对列表中的元素进行排序并返回排序后的列表

          例:        

        @arr = qw/c d b a/;             

        @temp = sort@arr;               #@temp变为qw/a b c d/  

        @temp = reverse sort 6..10;  #@temp变为qw/10 6 7 8 9/,将数字当成字符串来排序结果会不准确  

        @arr = reverse sort @arr ;     #@arr变为qw/d c b a/,先按sort排序,再按reverse排序

        sort @arr                            #@arr没有被修改,因为返回值无处可去

     

    四、字符串中的数组内插

        例:

       @arr = qw{b     c};

       print "a @arr d";             #打印输出:a b c d

       print "a $arr[1] d";          #打印输出:a c d

       print "a $arr[2-1] d";       #同上

       $temp = "right";

     

     

       print "this is $arr/[1]";     #同上,用/区分

       print "this is $arr"."[1]";    #同上用字符串连接符区分

     

       print "this is $arr[1]";      #打印输出:this is c

       print "this is ${arr}[1]";   #打印输出:this is right[1],用大括号区分数组元素和标量变量

     

     

     五、foreach循环结构

    foreach可逐项遍历列表中的值

         例:

         foreach $rock (qw/a b c/) {          print "rock is $rock./n";     #每次循环,控制变量$rock都会从列表中取得新值    }

        输出结果:

        rock is a.

        rock is b.

        rock is c.

    可通过修改控制变量(即上例中的$rock)的值对列表元素进行修改,循环结束后控制变量的值恢复为循环前的值

         例:

         @rocks = qw/a b c/;

        $rock = "rock";

         foreach $rock ( @rocks ) {          $rock = "/t$rock";    #在@rocks的每个元素前加上跳格符

              $rock .="/n";           #同时在@rocks末尾加上换行符

               print "The rock is:$rock";    }

        print "The rocks are:/n", @rocks;

        print "Loop ends: the rock is $rock";

        输出结果:

         The rock is a

        The rock is b

        The rock is c

        The rocks are:        a        b        c

        Loop ends:the rock is rock


    最新回复(0)