大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> CGI专区 -> Perl教学 第九篇 关联数组之一

Perl教学 第九篇 关联数组之一

时间: 2021-07-31 作者:daque

一、数组变量的控制在前方讲的数组变量中,不妨经过下标考察个中的元素。比方,下列语句考察数组@array的第三个元素:$scalar = $array[2];固然数组很有效,但它们有一个明显缺点,即很难记取哪个元素存贮的什么实质。假设咱们来写一个步调计划某文献中首假名小写的单词展示的度数,用数组来实行就比拟艰巨,步调代码如次: 1 : #!/usr/local/bin/perl2 :3 : while ($inputline = ) {4 : while ($inputline =~ /\b[a-z]\s+/g) {5 : $word = $&;6 : $word =~ s/[;.,:-]$//; # remove punctuation7 : for ($count = 1; $count <= @wordlist;8 : $count++) {9 : $found = 0;10: if ($wordlist[$count-1] eq $word) {11: $found = 1;12: $wordcount[$count-1] += 1;13: last;14: }15: }16: if ($found == 0) {17: $oldlength = @wordlist;18: $wordlist[$oldlength] = $word;19: $wordcount[$oldlength] = 1;20: }21: }22: }23: print ("capitalized words and number of occurrences:\n");24: for ($count = 1; $count <= @wordlist; $count++) {25: print ("$wordlist[$count-1]: $wordcount[$count-1]\n");26: }运转截止如次:here is a line of input.this input contains some capitalized words.^dcapitalized words and number of occurrences:here: 1input: 2this: 1capitalized: 1 这个步调历次从规范输出文献读一条龙笔墨,第四行起的轮回配合每行中首假名小写的单词,每找到一个轮回一次,赋给大略变量$word。在第六行中去掉圈点后,察看该单词能否曾展示过,7~15行中在@wordlist中挨个元素做此查看,即使某个元素与$word十分,@wordcount中相映的元素就减少一个数。即使没有展示过,即@wordlist中没有元素与$word十分,16~20行给@wordlist和@wordcount减少一个新元素。二、设置正如你所看到的,运用数组元素爆发了少许题目。开始,@wordlist中哪个元素对应着哪个单词并不鲜明;更糟的是,每读进一个新单词,步调必需查看所有列表本领领会该单词能否已经展示过,当列表变得较大时,这是很奢侈功夫的。那些题目爆发的因为是数组元素经过数字下标考察,为领会决这类题目,perl设置了另一种数组,不妨用大肆大略变量值来考察其元素,这种数组叫作关系数组,也叫哈希表。为了辨别关系数组变量与普遍的数组变量,perl运用%动作其首字符,而数组变量以@打头。与其它变量名一律,%后的第一个字符必需为假名,后续字符不妨为假名、数字或下划线。三、考察关系数组的元素关系数组的下标不妨为任何大略/标量值,考察单个元素时以$标记打头,下标用大括号围起来。比方: $fruit{"bananas"}$number{3.14159}$integer{-7} 大略变量也可动作下标,如:$fruit{$my_fruit}四、减少元素创造一个关系数组元素最大略的本领是赋值,如语句$fruit{"bananas"} = 1; 把1赋给关系数组%fruit下标为bananas的元素,即使该元素不生存,则被创造,即使数组%fruit从未运用过,也被创造。这一个性使得关系数组很简单用来计数。底下咱们用关系数组改写上头的步调,提防实行同样的功效此步调简化了很多。1 : #!/usr/local/bin/perl2 :3 : while ($inputline = ) {4 : while ($inputline =~ /\b[a-z]\s+/g) {5 : $word = $&;6 : $word =~ s/[;.,:-]$//; # remove punctuation7 : $wordlist{$word} += 1;8 : }9 : }10: print ("capitalized words and number of occurrences:\n");11: foreach $capword (keys(%wordlist)) {12: print ("$capword: $wordlist{$capword}\n");13: } 运转截止如次:here is a line of input.this input contains some capitalized words.^dcapitalized words and number of occurrences:this: 1input: 2here: 1capitalized: 1 你不妨看到,这次步调大略多了,读取输出共存贮各单词数量从20行缩小到了7行。本步调用关系数组%wordlist盯梢首假名小写的单词,下标就用单词自己,元素值为该单词展示的度数。第11行运用了内嵌因变量keys()。这个因变量归来关系数组的下标列表,foreach语句就用此列表轮回。注:关系数组老是随机存贮的,所以当你用keys()考察其一切元素时,不保护元素以任何程序展示,更加犯得着一提的是,它们不会以被创造的程序展示。要想遏制关系数组元素展示的步骤,不妨用sort()因变量对keys()归来值举行陈设,如: foreach $capword (sort keys(%wordlist)) {print ("$capword: $wordlist{$capword}\n");}

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.