您的位置:首页 > 其它

Perl语言入门笔记 第六章 哈希(hash)

2015-09-21 01:33 351 查看
=pod

哈希

哈希表里只是一堆的键值对而已,而没有任何顺序,键可以是任意字符串,值也是
awk的哈希键值对增多的时候会逐渐变慢,而perl没有这个缺点

访问哈希元素:
$hash{$some_key}

foreach my $person (qw< barney fred >)
{
print "I'v heared of $person $family_name{$person}.\n";
}
在挑选哈希名的时候,最好使得哈希名和键之间能放进去一个"for"字,比如"family_name for fred"是filntstone,
因此把哈希命名为family_name能清晰地反映出键和值之间的关系。
$foo = 'bar';
print $family_name{$foo . 'ney'}; #打印"rubble",连接在一块

哈希可以被转换成列表

哈希赋值:
不是常见用法,但哈希真的可以用一般的赋值语法来赋值;
my %new_hash = %old_hash;
得到一个反序的哈希:键值互换
my %inverse_hash = reverse %any_hash;

胖箭头:
my $last_name = (
'fred' => 'flintstone',
'dino' => 'undef',
);

哈希函数:
perl中有很多有用的函数可以一次处理整个哈希。
keys函数能返回哈希的键列表,而values函数能返回对应的值列表。如果哈希没有任何的成员,则两个函数都返回空列表

my @k = keys %hash;
my @v = values %hash;
上面的keys和values是一一对应的
得到哈希中元素的个数:
my $count = keys %hash;
my $count = values %hash;
if(%hash)
{   }

each函数:
唯一适合使用each的地方
while(my($key, $value) = each %hash)
{   }

foreach函数:
foreach $key (sort keys %hash)
{   }

判断某项哈希元素的真假:
if($book{$some})
{   }

exists函数:
检查哈希中是否存在某个键,可以使用exists函数
if(exists $book{"dino"})
{   }

delete函数:
my $person = "betty";
delete $book{$person}; #撤销$person的借书证
上面"将undef存入哈希元素"并不相同,在这两种情况下,exists($books{"betty"})会得出相反的结果。在delete之后,键便不会出现在哈希之中,但存入undef后,键却是一定会存在的。

哈希元素的内插:
可以将单一哈希元素内插到双引号引起的字符串中。
foreach $person (sort keys %books)
{
if($book{$person})
{
print "$person has $books{$person} items\n";
#但这种方式不支持内插整个hash表
}
}

%ENV哈希:
print “PATH is $ENV{PATH}\n”;

=cut
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: