小白教程
所有教程
关于
Search
172.70.131.146
172.70.131.146
参数设置
贡献
退出
操作
编辑
移动
保护
信息
历史
删除
查看“Perl 哈希”的源代码
本页内容
上一节:
Perl_数组
下一节:
Perl_条件语句
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:Perl 哈希}}[[Category:Perl 教程|9]] = Perl 哈希 = 哈希是 '''key/value''' 对的集合。 Perl中哈希变量以百分号 (%) 标记开始。 访问哈希元素格式:'''${key}'''。 以下是一个简单的哈希实例: <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google', 'google.com', 'xiaobai', 'xiaobai.wang', 'taobao', 'taobao.com'); print "\$data{'google'} = $data{'google'}\n"; print "\$data{'xiaobai'} = $data{'xiaobai'}\n"; print "\$data{'taobao'} = $data{'taobao'}\n"; </sample> 执行以上程序,输出结果为: == 创建哈希 == 创建哈希可以通过以下两种方式: === 一、为每个 key 设置 value === <pre> $data{'google'} = 'google.com'; $data{'xiaobai'} = 'xiaobai.wang'; $data{'taobao'} = 'taobao.com'; </pre> === 二、通过列表设置 === 列表中第一个元素为 key,第二个为 value。 <pre>%data = ('google', 'google.com', 'xiaobai', 'xiaobai.wang', 'taobao', 'taobao.com'); </pre> 也可以使用 '''=>''' 符号来设置 key/value: <pre>%data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); </pre> 以下实例是上面实例的变种,使用 '''-''' 来代替引号: <pre>%data = (-google=>'google.com', -xiaobai=>'xiaobai.wang', -taobao=>'taobao.com'); </pre> 使用这种方式 key 不能出现空格,读取元素方式为: <pre> $val = $data{-google} $val = $data{-xiaobai}</pre> == 访问哈希元素 == 访问哈希元素格式:'''${key}''',实例如下: <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); print "\$data{'google'} = $data{'google'}\n"; print "\$data{'xiaobai'} = $data{'xiaobai'}\n"; print "\$data{'taobao'} = $data{'taobao'}\n"; </sample> 执行以上程序,输出结果为: == 读取哈希值 == 你可以像数组一样从哈希中提取值。 哈希值提取到数组语法格式:'''@{key1,key2}'''。 <sample title="" desc="" lang="perl" hererun="1"> #!/uer/bin/perl %data = (-taobao => 45, -google => 30, -xiaobai => 40); @array = @data{-taobao, -xiaobai}; print "Array : @array\n"; </sample> 执行以上程序,输出结果为: <pre> Array : 45 40 </pre> == 读取哈希的 key 和 value == === 读取所有key === 我们可以使用 '''keys''' 函数读取哈希所有的键,语法格式如下: <pre> keys %HASH </pre> 该函数返回所有哈希的所有 key 的数组。 <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); @names = keys %data; print "$names[0]\n"; print "$names[1]\n"; print "$names[2]\n"; </sample> 执行以上程序,输出结果为: <pre> taobao google xiaobai </pre> 类似的我们可以使用 '''values''' 函数来读取哈希所有的值,语法格式如下: <pre> values %HASH </pre> 该函数返回所有哈希的所有 value 的数组。 <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); @urls = values %data; print "$urls[0]\n"; print "$urls[1]\n"; print "$urls[2]\n"; </sample> 执行以上程序,输出结果为: <pre> taobao.com xiaobai.wang google.com </pre> == 检测元素是否存在 == 如果你在哈希中读取不存在的 key/value 对 ,会返回 '''undefined''' 值,且在执行时会有警告提醒。 为了避免这种情况,我们可以使用 '''exists''' 函数来判断key是否存在,存在的时候读取: <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); if( exists($data{'facebook'} ) ){ print "facebook 的网址为 $data{'facebook'} \n"; } else { print "facebook 键不存在\n"; } </sample> 执行以上程序,输出结果为: <pre> facebook 键不存在 </pre> 以上代码中我们使用了 '''IF...ELSE''' 语句,在后面的章节我们会具体介绍。 == 获取哈希大小 == 哈希大小为元素的个数,我们可以通过先获取 key 或 value 的所有元素数组,再计算数组元素多少来获取哈希的大小,实例如下: <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); @keys = keys %data; $size = @keys; print "1 - 哈希大小: $size\n"; @values = values %data; $size = @values; print "2 - 哈希大小: $size\n"; </sample> 执行以上程序,输出结果为: <pre> 1 - 哈希大小: 3 2 - 哈希大小: 3 </pre> == 哈希中添加或删除元素 == 添加 key/value 对可以通过简单的赋值来完成。但是删除哈希元素你需要使用 '''delete''' 函数: <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); @keys = keys %data; $size = @keys; print "1 - 哈希大小: $size\n"; # 添加元素 $data{'facebook'} = 'facebook.com'; @keys = keys %data; $size = @keys; print "2 - 哈希大小: $size\n"; # 删除哈希中的元素 delete $data{'taobao'}; @keys = keys %data; $size = @keys; print "3 - 哈希大小: $size\n"; </sample> 执行以上程序,输出结果为: <pre> 1 - 哈希大小: 3 2 - 哈希大小: 4 3 - 哈希大小: 3 </pre> == 迭代哈希 == 我们可以使用 foreach 和 while 来迭代哈希: == 实例 - 使用 foreach == <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); foreach $key (keys %data){ print "$data{$key}\n"; } </sample> == 实例 - 使用 while == <sample title="" desc="" lang="perl" hererun="1"> #!/usr/bin/perl %data = ('google'=>'google.com', 'xiaobai'=>'xiaobai.wang', 'taobao'=>'taobao.com'); while(($key, $value) = each(%data)){ print "$data{$key}\n"; } </sample> 执行以上程序,输出结果为: <pre> xiaobai.wang google.com taobao.com </pre>
返回至“
Perl 哈希
”。
上一节:
Perl_数组
下一节:
Perl_条件语句