perl5中新功能: 为列表添加数组元素

原创 2006年05月22日 15:41:00

以下文章是perl5的读书笔记,原文自http://perldoc.perl.org/perlreftut.html

1. 为什么要用列表的数组元素?

   假设有如下的数据

  北京, 中国

  天津,中国

 东京,日本

 首尔,韩国

 如果存储到列表中,则希望是这样的:

 中国 => 北京,天津

日本=>东京

韩国=>首尔

在perl4中,你只能把=>后面的元素当作字符串处理,每次处理时,要把字符串取出,排序,然后再存取.对于perl来讲,这些操作本应该是内至的,现在作到了.

2. 创建一个带有数组元素的列表

   1)  perl的引用符号 "/"

         你可以用符号 "/" 创建一个对数组,列表或者普通变量的引用如

        $aref = /@array;  #对数组的引用

       $href=/%list; #对列表的引用

      $scalar=/$var; //对普通变量的引用的

     引用可以传递:

    $xy = $aref; # $xy 建立的对@array的引用

   $p[3] = $href; #$p[3] 建立对%list的引用

   $z=$p[3] ;# $z同样建立了对%list的引用

   引用和C语言的指针比较相似,不同的是,引用自身带有变量类型.如

   print  $aref;  得到的结果是 ARRAY(0x275d18)

   print $href; 得到的结果是 HASH(0x1830ef4)

  2) 用[...]建立对无名数组的引用 ,用{key=>value,...}建立对无名列表的引用

     如:  $aref = [1,2,"foo",undef,13];

            $href={key1=>Val1,key2=>val2};

  效果如同

     @array = (1,2,"foo",undef,13);

    $aref=/@array;

  3) 使用引用访问对象

    对于数足,可以使用:

       @a   等同  @{$aref}

       reverse @a        reverse @{$aref}

      $a[3]         ${$aref}[3]

      $a[3] = 127;     ${$aref}[3] = 17

对于hash表,情况很相似

    %h            %{$href}

   keys %h     keys %{$href}

   $h{'red'}   ${$href}{'red'} 

  $h{'red'}=7    ${$href}{'red'}=7

  也可以用在任何你想用的地方,如

  for my $elment(@{$aref}){

}

   想c语言的指针一样,perl也可以使用"->"引用其子对象如

  ${$aref}[3]             ==          $aref->[3]

  ${$href{red}         ==          $href->{red}

  你还可以创建多伪数组

  @a = ( [1,2,3],[4,5,6],[7,8,9]);

  $a[n] 就是一个对子数组的引用,可以用${$a[n]}[n] 或者$a[n]->[n] 来存取对象

  他也支持混合的array和hash混合的现象,如

@a = ( [1,2,3,5],
       {a=>'a',b=>'b'}
);

可以用 $a[0]->[1](${$a[0]}[0]) , $a[1]->{a} ( ${a[0]}{a} ) 访问

对于大于两级 的引用"->"是可以省略的,$a[0]->[1] 可写成$a[0][1],${${$a[0]}[1]}[2] 可写成$a[0][1][2];

3 具体的解决方案

   回过头看看我们开始的程序应该怎么写:

  my %table;

print "input lick /"city,country/". and end input press enter directly/n";

  while(<>) {

  chomp;
if($_ eq "") {last;}

  my ($city,$country) = split /,[ ]*/;

   $table{$country} = [] unless exists $table{$country}; #如果不存在,就创建一个空的无记名列表引用

  push @{$table{$country}},$city;

}

#输出

foreach $country (sort keys %table) {

    print "$country: ";

   my @cities = @{$table{$country}};

   print join ', ',sort @cities;

  print "./n";

}

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

perl语言小技巧之按下标删除数组元素

perl 里面删除数组元素有 delete, 但delete删除后只是相应元素置为undef,实际上也有其他对数组进行操作的接口,如push,pop,shift,unshit,但它们只对数组的开头进行...
  • xxm524
  • xxm524
  • 2016-01-28 21:04
  • 1431

删除数组元素

use vs require in Perl5

Perl5 的程序执行分为两个阶段:compilation time & run time。而 use 与 require 依次发生在这两个不同的阶段。 值得注意的是:Parser对use的处理等同...

java获取文件的类型MagicMatch.getMimeType()报错 java.lang.NoClassDefFoundError: org/apache/oro/text/perl/Perl5

首先导入两个jar包:commons-logging-1.1.1.jar和jmimemagic-0.1.1.jar,然后代码处: public static void main(String[] a...

数组元素操作

添加数组元素

package Test;import java.util.Arrays; import java.util.Scanner;public class Two {/** * @param args...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)