perl5中新功能: 為列表添加數組元素

來源:互聯網
上載者:User

以下文章是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";

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.