加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl 引用的例子

发布时间:2020-12-15 20:55:29 所属栏目:大数据 来源:网络整理
导读:解决办法 下面是前面提出来的问题的解决方法,就是关于城市和国家名称的重新格式化。 ????1???my?%table; ????2???while?(;)?{ ????3????chomp; ????4?????my?($city,?$country)?=?split?/,?/; ????5?????$table{$country}?=?[]?unless?exists?$table{$count

解决办法 下面是前面提出来的问题的解决方法,就是关于城市和国家名称的重新格式化。 ????1???my?%table; ????2???while?(<>;)?{ ????3????chomp; ????4?????my?($city,?$country)?=?split?/,?/; ????5?????$table{$country}?=?[]?unless?exists?$table{$country}; ????6?????push?@{$table{$country}},?$city; ????7???} ????8???foreach?$country?(sort?keys?%table)?{ ????9?????print?"$country:?"; ???10?????my?@cities?=?@{$table{$country}}; ???11?????print?join?',?',?sort?@cities; ???12?????print?"./n"; ???13???} 这个程序分成两部分:?第?2--7?行完成数据的输入和数据结构的创建。?第?8-13?行分析这个数据并打印报告。我们设置了一个哈希?%table,它的键是国家名称,它的健值是这个国家名称对应的城市名的数组的'引用'。这个数据结构看起来如下: ???????????%table ????????+-------+---+??? ????????|???????|???|???+-----------+--------+ ????????|Germany|?*---->;|?Frankfurt?|?Berlin?| ????????|???????|???|???+-----------+--------+ ????????+-------+---+ ????????|???????|???|???+----------+ ????????|Finland|?*---->;|?Helsinki?| ????????|???????|???|???+----------+ ????????+-------+---+ ????????|???????|???|???+---------+------------+----------+ ????????|??USA??|?*---->;|?Chicago?|?Washington?|?New?York?| ????????|???????|???|???+---------+------------+----------+ ????????+-------+---+ 我们先来分析输出部分。假设我们已经拥有了这个结构,那么我们怎么来输出呢? ????8???foreach?$country?(sort?keys?%table)?{ ????9?????print?"$country:?"; ???10?????my?@cities?=?@{$table{$country}}; ???11?????print?join?',?sort?@cities; ???12?????print?"./n"; ???13???} %table是一个普通的哈希,我们从它这里可以取得一列键,对键进行排序,并遍历所有的键。这里唯一使用'引用'的是第10行。$table{$country}?查看了哈希中的键$country并取得它的值。这个健值是对应国家中的城市数组的'引用'。?使用规则?1?告诉我们可以通过使用?@{$table{$country}}来恢复整个数组。第10行就象 ????????@cities?=?@array; 不同的是这里的数组的名字被'引用'?{$table{$country}}所替代。符号?@?告诉Perl去获取整个数组。得到了城市的列表后,我们照样对其进行排序,合并城市名,并打印出来。 第2-7行负责创建数据结构,如下: ????2???while?(<>;)?{ ????3????chomp; ????4?????my?($city,?$city; ????7???} 第?2-4?行获取城市和国家的名称。第5行查看这个国家名称是不是已经作为一个键存放在哈希里面了,如果没有,程序就使用符号[]?(创建规则?2)创建一个新的、空的匿名数组,同时把一个指向这个匿名数组的'引用'作为健值放到哈希里面去了。 第6行将城市名放到对应的数组里面。$table{$country}?现在保存了一个'引用',它指向所对应的国家的城市的数组。第6行就象 ????????push?@array,?$city; 不同的是这里的数组名被{$table{$country}}所替代。?命令?push?将城市名加到这个'引用'指向数组的最后。 这里有一个要点被我忽略了。第5行是不需要的。我们可以取掉它。 ????2???while?(<>;)?{ ????3????chomp; ????4?????my?($city,?/; ????5???####??$table{$country}?=?[]?unless?exists?$table{$country}; ????6?????push?@{$table{$country}},?$city; ????7???} 如果在哈希?%table?中已经有这个国家名?$country的记录,那么,加不加第5行没有任何区别。第6行会自己定位到$table{$country}这个'引用'指向的数组,把值?$city?放到数组中去。但是如果在%table中没有那个键,比如Greece,那么它会怎么办呢? 这是Perl,它会自己准确地完成工作。你想把一个Athens赋值给一个不存在地数组,那么Perl会帮助你创建一个新的、空的匿名数组,将它放到哈希%table里面去,然后把值?Athens?放到这个数组中。这个被称为'自动生成'?--让事物自己自动产生出来。?Perl?发现在哈希里面没有这个键,就自动地创建了一个新的哈希记录。?Perl?发现你想要使用数组作为哈希的健值,它就自动创建一个匿名的空数组,并将指向这个数组的'引用'放到那个哈希中去。一般,?Perl?创建的数组只有一个成员大小,用于保存这个新的城市名。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读