• 数组的操作


    列表--数组的形式
    
    形式:(1,"a",2.3,$a,$x+1)
    
    元素可以是任意类型,变量,表达式
    
    空列表:()
    
    单元素列表:(2) 。  与值2不同。
    
    
    
    qw(1 $a str)
    
    qw用法同q,qq.  ()可替换成其他符号<>
    
    可以为值,变量,不同引号的字符窜,有空格分开
    
    
    
    范围表示的列表:
    
    .. : 范围运算符。每次增1。 1..3
    
    (1,2,3,4,5,6) -->(1..6) 元素从左边的值增加到右边的值。
    
    (1,2,3,4,5,6) --> (1,2..5,6)部分使用范围
    
    (3..3) -->(3) 首尾一样,不能增
    
    (2.4..5.3)-->(2.4,3.4,4.4)小数同样也增1,到小于右边的值的小数。
    
    (4.5..1.6)-->()左边值>右边值 则为空
    
    
    数组---列表的存储
    
    数组形式: @a=(1,2,3)
    与$a是不同的变量
    初始为空()
    
    元素形式:$a[0]
    
    数组的元素为简单变量,以$开头。后面的变量名同数组名。
    
    下标从0开始。[] 有时也称为运算符。
    
    负索引;最后一个元素可以用$a[-1]表示,倒数第二格为$a[-2].
    
    
    列表也可以有下标:(1,2,3)[0] -->1 但是列表没有存储,不能在下次使用
    
    
    
    数组的赋值
    
    形式:以下结果@a均为含元素1,2,3,4的数组。
    
    1. @a=(1,2,3,4);标准的列表赋值
    
    2.@b=(1,2,3,4),@a=@b;数组复制
    
    3.@b=(2,3),@a=(1,@b,4);
    
    4.@b=('a') * 4;@b=('a','a','a','a');
    
    5.@b=<>;从标准输入(键盘)读出一行赋予元素,最后ctrl-d结束输入。
    
    
    改变元素的值:$a[1]=3; @a=(1,3,3,4);
    
    
    
    数组的读出:
    
    
    单个元素读取: $a=$a[1];
    
    多元素读取;
    
    每个元素对应到变量:
    
    @a=(1,2,3);($x,$y,$z)=@a;->$x=1,$y=2,$z=3;
    
    多余的变量为空:($a,$b,$c,$d)=@a;-->$a=1,$b=2,$c=3,$d=""
    
    变量不足,后续元素忽略:($a,$b)=@a;$a=1,$b=2;
    
    $a=@a;$a为数组长度。($a)=@a;为取第一个元素
    
    $a=(1,2,3),返回最右的元素,$a=3;
    
    $#a数组最后一个元素的索引。加1即为长度,但对$#a赋值就改变了数组的长度
    
    数组输出:print @a;元素相连
    
    print "@a";元素间加空格
    
    
    数组片段:
    
    访问数组的部分元素,不是单元素,不是全部。
    
    @a=(1,2,3,4,5)
    
    读出@sub=@a[0,1,3]  读取1,3,4元素  @sub=(1,2,4)
    
    赋值@a[1,3]=("a","b")  @a=(1,"a",3,"b",5)
    
    数组的元素列表可用列表的各种形式表示:
    
    范围:@sub=@[1..3] @sub=(2,3,4)
    $x=1,$y=3;@sub=@a[$x..$y];@sub=(2,3,4)
    
    列表:@b=(1,2,3);@sub=@a[@b];@sub=(2,3,4)
    
       @b=(2,3);@sub=@a[1,@b];@sub=(2,3,4)
    ($a,@b,$c)=(1,2,3,4,5) @b=(2,3,4,5),$c="
    
    数组元素重叠:
    
    交换: @a[1,2]=@a[2,1]  @a=(1,2,3,4,5)
    
    重叠: @a[1,2,3]=@a[3,2,4]   @a=(1,4,3,5,5)
    
    
    
    数组操作函数:
    
    sort{代码块} 或函数名 @array
    
    缺省按字母排序,可省略代码块。
    
    $a,$b 代表数组的元素,@_代表数组。
    
    reverse @a,数组反序
    
    chop @a 每个元素截去最后一个字符
    
    shift(@a) 删除数组第一个元素,返回删除的元素。缺省对@ARGV数组
    
    unshift(@a,$a):在数组开头增加元素,返回新数组长度。
    
    push (@a,$a):在数组末尾添加元素
    
    pop(@a):在数组末尾删除元素
    
    
    reverse @a,数组反序
    
    数组函数之二:
    
    Join('连接符',@a) 把数组练成一个字符窜
    
    @a=('a','b')join(',',@a)='a,b';join(',','a','b')='a,b';
    
    split(/模式/,分割串,长度)
    
    模式:缺省为空格,可省略
    
    分割窜:缺省为$_,可省略
    
    长度:可省略,全部分割
    
    $s=a,b,c";@a=split(/,/,$s);@a=('a','b','c');
    
              @a=split(/,/,$s,2); @a=('a','b,c');
    
    wantarray():当期望返回数组时为真,返回简单变量时为假@a=mysub;$a=mysub;
    
    
    
    数组函数值三
    
    splice:
    
    @ret=splice(@a,skip,length,@newlist)
    
    对@a操作,跳过skip个元素,然后开始用@newlist替换length个元素。@newlist和length可以不等长,无论@newlist多长,
    
    它占用(替换)length长的元素位置。
    
    当length=0时为插入,splic(@a,-1,0,@n)在末尾追加
    
    当@newlist为空则删除。
    
    当length和@newlist省略时为其后的全部删除。splice(@a,3);
    
    
    @found=grep(/pattern/,@serch)对@serch的每一个元素搜索匹配模式,匹配的元素返回到@found数组中。
    
    map(expr,@list)对@list每个元素进行expr运算,返回运算后的数组。元素用$_代表 map($_ +1,(1,2))-->(2,3)
    
    
    二维数组
    
    
    $aoa=[[1,2,3],['a','b','c']];
    
    内含两个子数组(1,2,3),('a','b','c').
    
    子数组访问 ; @{$aoa->[0]}
    
    子数组元素列表:@{$aoa->[0]}
    
    元素访问: $aoa->[0][0]
    
    有一维数组构成而维数组:
    
    @a=(1,2,3);
    
    @b=('a','b','c');
    
    $aoa=[[@a],[@b]];
    
    $aoa->[0][0];
    
    
    
    [oracle@jhoa 12]$ cat 3.pl 
    print "二维数组示例:";
    $aoa=[[1,2,3],['a','b','c']];
    print "$aoa->[0][0]
    ";
    print "@{$aoa->[0]}[0,1]
    ";
    print "@{$aoa->[0]}
    ";
    print "@$aoa
    ";
    [oracle@jhoa 12]$ vi 3.pl 
    [oracle@jhoa 12]$ perl 3.pl 
    二维数组示例:1
    1 2
    1 2 3
    ARRAY(0xac92a0) ARRAY(0xac9170)
    a
    [oracle@jhoa 12]$ cat 3.pl 
    print "二维数组示例:";
    $aoa=[[1,2,3],['a','b','c']];
    print "$aoa->[0][0]
    "; ##打印第一个数组的第一个元素
    print "@{$aoa->[0]}[0,1]
    "; ##打印第一个数组的第1?两个元素
    print "@{$aoa->[0]}
    ";  ##打印第一个数组
    print "@$aoa
    "; 
    
    @a=(1,2,3);
    @b=('a','b','c');
    $aoa=[[@a],[@b]];
    print "$aoa->[1][0]
    ";
    [oracle@jhoa 12]$ cat 1.pl 
    #!/usr/bin/perl
    print "单元素列表:";
    @a = (2);
    $a = $a[0];
    print $a;
    
    
    print "
    列表范围:";
    @a=(4.5..1.6);
    print "@a
    ";
    
    print "列表元素:";
    $a=(1,2,3,4)[1];
    print "$a
    ";
    
    
    print "列表赋值:";
    $a=(1,2,3);
    print "$a
    ";
    
    print "$#a的应用:";
    @a=(1,2,3);
    print "数组长度为$#a+1	";  ## $#为最后一个元素下标
    $#a=1;
    print "数组元素减少为@a
    ";
    
    
    print "sort的使用:";
    @a=(1,12,4,8,20);
    print sort(@a);
    print sort {$a<=>$b}(@a);
    [oracle@jhoa 12]$ cat 1.pl 
    #!/usr/bin/perl
    print "单元素列表:";
    @a = (2);
    $a = $a[0];
    print $a;
    
    
    print "
    列表范围:";
    @a=(4.5..1.6);
    print "@a
    ";
    
    print "列表元素:";
    $a=(1,2,3,4)[1];
    print "$a
    ";
    
    
    print "列表赋值:";
    $a=(1,2,3);
    print "$a
    ";
    
    print "$#a的应用:";
    @a=(1,2,3);
    print "数组长度为$#a+1	";  ## $#为最后一个元素下标
    $#a=1;
    print "数组元素减少为@a
    ";
    
    
    print "sort的使用:";
    @a=(1,12,4,8,20);
    print sort(@a);
    print sort {$a<=>$b}(@a);
    
    print "$#a的应用:";
    @a=(1,2,3);
    print "数组长度为$#a+1	";
    $#a=1;
    print "数组元素减少为@a
    ";
    
    print "sort的使用:";
    @a=(1,12,4,8,20);
    print sort(@a);
    print "
    ";
    ##<=>数值比较运算 
    print sort {$a<=>$b} (@a);
    
    print "
    split示例:";
    $a='a,b,c';
    @b=split(/,/,$a,2);
    print "@b
    ";
    
    #每个元素加1
    print "map示例:";
    print map($_+1,(1,2));
    print "
    ";
    
    
    print "wantarray示例:";
    sub mysub(){print wantarray()?"数组	":"变量
    ";}
    @a=mysub;
    $a=mysub;
    
    print "二维数组示例:";
    $aoa=[[1,2,3],['a','b','c']];
    print "$aoa->[0][0]
    ";
    print "@{$aoa->[0]}[0,1]
    ";
    print "@{$aoa->[0]}
    ";
    print "@$aoa
    ";
    
    print "二维数组示例:";
    $aoa=[[1,2,3],['a','b','c']];
    print "$aoa->[0][0]
    "; ##打印第一个数组的第一个元素
    print "@{$aoa->[0]}[0,1]
    "; ##打印第一个数组的第1?两个元素
    print "@{$aoa->[0]}
    ";  ##打印第一个数组
    print "@$aoa
    "; 
    
    @a=(1,2,3);
    @b=('a','b','c');
    $aoa=[[@a],[@b]];
    print "$aoa->[1][0]
    ";
    

  • 相关阅读:
    算法常识——二叉堆
    关于c++ 感想
    算法常识——树的遍历
    算法常识——非线性结构
    算法常识——基础的数据结构
    算法常识——结构与复杂度
    重温网络编程——常识(三)
    重温网络编程——协议(二)
    重温网络编程(一)
    RemoteViews 整理
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352047.html
Copyright © 2020-2023  润新知