#!/usr/bin/perl -w
#########################################################################
# File Name: test3.pl
# Author: kevin xiang
# Created Time: 2014年07月08日 星期二 09时07分13秒
#########################################################################
print "hash map\n";
my %some_hash = ("key1", 100, "key2",200, "key3", 300);
%some_hash = reverse %some_hash; #翻转的是key-value --> value-key
#这种定义方法能更明确那个是key,那个是value
%some_hash = (
"key4" => 1,
"key5" => 2,
"key6" => 3,
"key7" => 4,
);
#在hash中插入一个新元素,只需要直接赋值即可,有则覆盖,无则新建
$some_hash{"key8"}=5;
my @hash_to_array = %some_hash;
print "hash_to_array: @hash_to_array \n";
#hash 函数
#函数keys返回hash所有的keys, 函数values返回所有的values
my %funcHash1 = ("a"=>1, "b"=>2, "c"=>3);
my @k = keys(%funcHash1);
my @v = values(%funcHash1);
print "keys: @k\n";
print "values: @v\n";
#函数each 返回key/value列表, 用于迭代hash每一个元素
my %funcHash2 = ("a"=>4, "b"=>5, "c"=>6, "d"=>0);
while( my($key, $value) = each %funcHash2 ){
print "$key --> $value\n";
}
#hash的存储是无序的,可以用sort排序
foreach $key ( sort(keys(%funcHash2)) ){
$value = $funcHash2{$key};
print "key: $key => value: $value\n";
}
#exists 函数,查看hash中是否含有某个key
if(exists $funcHash2{"a"}){
print "funcHash2 中存在这个key\n";
}else{
print "funcHash2 中不存在这个key\n";
}
#如果省略exists,则是通过value是undef或者是0判断不存在,但value==0是存在的元素
if($funcHash2{"d"}){
print "funcHash2 中存在这个key\n";
}else{
print "funcHash2 中不存在这个key\n";
}
#delete 函数, 删除hash中某key对应的元素
my %funcHash3 = ("a"=>11, "b"=>22, "c"=>33);
@temp = %funcHash3;
print "@temp\n";
delete $funcHash3{"b"}; #返回的是删除的key所对应的value 22
@temp = %funcHash3;
print "@temp\n";
#双引号中支持单个hash元素, 但是支持整个hash内插
print "$funcHash3{'a'}\n"; #输出对应的单个元素
print "%funcHash3\n"; #不支持这种形式,直接输出$funcHash3
end