曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3796|回复: 0
打印 上一主题 下一主题

哈希及相关函数

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-9-26 11:10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 基本的哈希赋值格式
$domain{"groad"} = "good";
$domain 是个哈希表,"groad" 是个键,"good" 是该键所对应的值。

2. 整个哈希
使用 % 作为哈希表的前缀表示指代整个哈希。如下例:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

my %hash = ("groad", 100, "sina", 90, "sohu", 80);

my @key = keys %hash;

my @val = values %hash;

foreach (@key) {
        print "$_\t";
}
print "\n";

foreach (@val) {
        print "$_\t"
}
print "\n";


运行输出:
./keys_values.pl
sina    sohu    groad
90      80      100
3. 哈希松绑
将整个哈希复制给一个数组称为哈希松绑,松绑时哈希自动转换为一些简单的 键/值 对。如下所示:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

my %hash = ("groad", 100, "sina", 90, "sohu", 80);

@array = %hash;

foreach (@array) {
        print "$_ "
}
print "\n";


运行输出:
# ./release_has.pl
sina 90 sohu 80 groad 100
4. 一种美观的给哈希赋值的方法:
像上面的 my %hash = ("groad", 100, "sina", 90, "sohu", 80); 这种赋值方法并不易区分键值对。下面使用带有胖箭头( => ) 的赋值方法使赋值形式更加的整齐美观:
[Perl] 纯文本查看 复制代码
my %hash = (
          "groad" => 100, 
           "sina" => 90, 
            "sohu" => 80
);



5. keys 和 values 函数:
keys 函数能返回哈希的键列表。
values 函数能返回值列表。
如果哈希表里没有任何成员,那么这两个函数都返回空列表。

测试代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

my %hash = ("groad" => 100, "sina" => 90, "sohu" => 80);

my @key = keys %hash;

my @val = values %hash;

foreach (@key) {
        print "$_\t";
}
print "\n";

foreach (@val) {
        print "$_\t"
}
print "\n";


运行输出:
# ./keys_values.pl
sina    sohu    groad
90      80      100
6. each 函数
使用 each 函数可以列出哈希的每个 键/值对 。常见的用法是每次获取一个键值对,比如:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

my %hash = ("groad" => 100, "sina" => 90, "sohu" => 80);

while ( ($key, $value) = each %hash ) {
        print "$key => $value\n";
}


运行输出:
# ./each.pl
sina => 90
sohu => 80
groad => 100
注意,each 返回的 键/值对 是乱序的,但键和值总是会相对应的。

7. exists 和 delete 函数:
exists 函数可以检查哈希中是否有某个键值,在的话返回真,否则返回假。
delete 函数可以从哈希中删除指定的键及其对应的值。假如没有这样的键,那么会直接结束,而不会发出任何警告和错误信息。

测试代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

my %hash = ("groad" => 100, "sina" => 90, "sohu" => 80);

if (exists $hash{"groad"}) {
        print "Gorad is exist.\n";
}

if (exists $hash{"163"}) {
        print "Netease is exist.\n";
}
else {
        print "Net ease is not exist.\n";
}

delete $hash{"groad"};

if (exists $hash{"groad"}){
        print "groad is exist.\n";
}
else {
        print "groad is not exist.\n";
}


运行输出:
# ./exist_del.pl
Gorad is exist.
Net ease is not exist.
groad is not exist.
8. %ENV 哈希:
系统的环境变量在 Perl 中可以被感知,它们被存储在一个内置的哈希里 %ENV 。如下所示:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

print "HOME is $ENV{HOME}\n";

print "PATH is $ENV{PATH}\n";


运行输出:
# ./env.pl
HOME is /root
PATH is /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/etc/alternatives/gem-bin
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-7-4 08:40 , Processed in 0.080054 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表