第9章 数据结构

来源:互联网 发布:上海财经大学数据库 编辑:程序博客网 时间:2024/06/05 08:24
<pre name="code" class="sql">9.1 数组的数组:有许多种类型的嵌套数据结构,最容易做的是制作一个数组的数组,也叫做两维数组或者矩阵。9.1.1   创建和访问一个两维数组:下面是如何把一个两维数组放在一起的方法:##给一个数组赋予一个数组引用列表:zjzc01:/root/big2# cat a17.pl @Aoa = (["fred", "barney" ],["george", "jane", "elroy" ],["homer", "marge", "bart" ],);print $Aoa[0][1]."\n";zjzc01:/root/big2# perl a17.pl barney整个列表都封装在圆括弧里,而不是花括弧里,因为你是给一个俩别哦复制而不是给引用赋值。如果你想要一个指向数组的引用,那么你要使用方括弧:##创建一个指向一个数组的数组的引用:zjzc01:/root/big2# cat a18.pl $ref_to_AoA = [[ "fred", "barney", "pebbles", "bamm bamm", "dino", ],[ "homer", "bart", "marge", "maggie", ],[ "george", "jane", "elroy", "judy", ],];print $ref_to_AoA->[0][fred]."\n";print $$ref_to_AoA[0][fred]."\n";zjzc01:/root/big2# perl a18.pl fredfred 请记住在每一对相邻的花括弧或方括弧之间有一个隐含的-> ,因此下面两行:$AoA[2][3]$ref_to_AoA->[2][3]等效于下面两行:$AoA[2]->[3]$ref_to_AoA->[2][3]9.2 数组的散列的组成:你可以用下面的方法创建一个匿名数组的散列:##如果键字是标示符,我们通常省略引号:zjzc01:/root/big2# cat a20.pl %HoA = (flintstones => [ "fred", "barney" ],jetsons => [ "george", "jane", "elroy" ],simpsons => [ "homer", "marge", "bart" ],);print %HoA;print "\n";print $HoA{flintstones}[0]."\n";zjzc01:/root/big2# perl a20.pl simpsonsARRAY(0x1c29560)jetsonsARRAY(0x1c292c0)flintstonesARRAY(0x1c0cd48)fred9.3   散列的数组:如果你有一堆记录,你想顺序访问它们,并且每条记录本身包含一个键字/数值对,那么散列的数组就很有用。在本章中,散列的数组比其他结构用得少一系。9.3.1  组成一个散列的数组:你可以用下面的方法创建一个匿名散列的数组:zjzc01:/root/big2# cat a21.pl @AoH = ({husband => "barney",wife => "betty",son => "bamm bamm",},{husband => "george",wife => "jane",son => "elroy",},{husband => "homer",wife => "marge",son => "bart",},);print @AoH;print "\n";print $AoH[0]{husband};print "\n";zjzc01:/root/big2# perl a21.pl HASH(0xb21d48)HASH(0xb3e590)HASH(0xb3e608)barney9.4  散列的散列:多维的散列时Perl里面最灵活的嵌套结构。它就好像绑定一个记录,该记录本身包含其他记录。在每个层次上,你都用一个字符(必要时引起)做该散列的索引。不过,你要记住散列里的键字/数值 对不会以任何特定的顺序出现,你可以使用sort 函数以你喜欢的任何顺序检索这些配对。9.4.1  构成一个散列的散列:zjzc01:/root/big2# cat a22.pl %HoH = (flintstones => {husband => "fred",pal => "barney",},jetsons => {husband => "george",wife => "jane","his boy" => "elroy", },simpsons => {husband => "homer",wife => "marge",kid => "bart",});print %HoH;print "\n";print $HoH{flintstones}{husband};print "\n";zjzc01:/root/big2# perl a22.pl simpsonsHASH(0x1700608)jetsonsHASH(0x17002c0)flintstonesHASH(0x16e3d48)fred9.5  函数的散列:if ($cmd =~ /^exit$/i) { exit }elsif ($cmd =~ /^help$/i) { show_help() }elsif ($cmd =~ /^watch$/i) { $watch = 1 }elsif ($cmd =~ /^mail$/i) { mail_msg($msg) }elsif ($cmd =~ /^edit$/i) { $edited++; editmsg($msg); }elsif ($cmd =~ /^delete$/i) { confirm_kill() }else {warn "Unknown command: `$cmd'; Try `help' next time\n";}你还可以在你的数据结构里保存指向函数的引用,就像你可以存储指向数组或者散列的引用一样:my (@frames,@button);         my %sub_of = (     "日志查询" => \&push_button2 ,         "温金短信查询" => \&push_button3 ,         "中均短信查询" => \&push_button4 ,         "机器信息查询" => \&push_button5,         "IP信息查询" => \&push_button6,         "设备信息维护" => \&push_button7,         "test" => sub{ print "program 6" },         7 => sub{ print "program 7" },         8 => sub{ print "program 8" },         9 => sub{ print "program 9" }, );~   


                                             
0 0
原创粉丝点击