Saturday, February 14, 2009

perl中的数据结构

开始学perl,是从<<learning perl >>一书开始的, 这样有个好处:初学者不用也不应该去知道perl太多的约定,不然,perl还没有学到人就怕了.

learning perl一书内容比较简单.感觉很自在.大概浏览了后,发现提到perl两种数据结构:
1. array
1. hash

但是没有提到:
1. 多维array
1. array与hash的混合引用.

这最觉得不爽了, 对于算法不强的人来说这无疑是个灾难!

google了一把, 原来这方面的知识在<<programming perl>>一书中讲到:
* http://docstore.mik.ua/orelly/perl/prog3/ch09_01.htm

回顾一下简单的array和简单的hash的产生方法:
1. array的产生:
my @TiketNum = (1, 19, 20, 45, 56, 19, 42, 56);
2. hash的产生:
my %Person = (
jessinio => "SA",
jacke => "PE",
hyliker => "RP",
zoomq => "LD",
smallfish => "EA"
);

可以看到, array和hash都是使用了"("和")"与产生的.

仅仅利用"()"产生array和hash是不能构造出复杂的数据结构的.如下面的写法就出问题了:
my @TiketNum = ((1, 9), 19, 20, 45,56,19,42,56);
print $TiketNum[0][0]

或者:
my @TiketNum = (1, 19, 20, 45,56,19,42,56);
$TiketNum[0] = (1, 9);
print $TiketNum[0][0];

都是有问题的. hash也是有同样的问题



看了programming perl讲到的数据结构后, 知道了array和hash原来有其它的产生方法:
1. array 使用 "[]"
1. hash 使用"{}"

要想复杂的数据结构只能利用这两种产生方法, 如:

my %Person = (
name => "jessinio",
age => 26,
description => "System administrator",
location => "zhu hai",
LuckNumber => [8, 168, 88] #不是使用"()"的!!
);
print $Person{'LuckNumber'}[0];

* 当然, 可以把所有的"()"用"{}","[]"去代替
产生array和hash后, 去修改存在的array和hash, 使之成为复杂的数据结构, 要使用"[]"和"{}"

如:

my @TiketNum = (1, 19, 20, 45,56,19,42,56);
$TiketNum[0] = [1, 4, 0, 8]; #不是使用"()"的!!
print $TiketNum[0][3];

还可以array的成员为hash:
my @TiketNum = (1, 19, 20, 45,56,19,42,56);
$TiketNum[0] = {1 => 4, 0 => 8}; #不是使用"()"的!!
print $TiketNum[0]{1};


这样就有复杂的数据结构了.



BTW: 没有这两种数据结构真的不是滋味!shell就没有了!!!呃......所以学perl了(原因之一) ^_^

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.