Perl Hash 用法

本文详细介绍了哈希表的基本概念、初始化、赋值、访问、删除、清空、获取键值、判断键是否存在、计算长度、遍历等核心操作。通过实例演示了如何使用哈希表进行数据存储与检索,包括使用引用和函数传递哈希表的方法。文章还提供了哈希表长度计算、遍历技巧和引用机制的深入解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]基本用法[/b]

# 初始化 %h为空数组
%h = {};

# 用数组初始化%h为 a=>1, b=>2
%h = ('a', 1, 'b', 2);# 意义同上,只是另一种更形象化的写法。

%h = ('a'=>1, 'b'=>2);#如果key是字符串,可以省略引号。
下面这行和上面那行是一样的%h = (a=>1, b=>2);

# 用{}来访问print "
$h{a}\n"; # 打印1

$h{b} = '2b';
print "$h{b}\n"# 打印2b

# 删除key用deletedelete $h{b}; # 从$h删除'b'


[b]清空hash[/b]
undef %h 


[b]得到hash的所有键值[/b]#
得到所有keys,顺序取决于hash函数,或者说是乱序
@all_keys = keys %h;
# 所有键值,是按hash的值从大往小排列的。值的比较是数字比较(比如说,10>9)@all_keys = sort{$h{$b}<=>$h{$a}} (keys %h);

# 所有键值,是按hash的值从小往大排列的。值的比较是数字比较
@all_keys = sort{$h{$a}<=>$h{$b}} (keys %h);

# 所有键值,是按hash的值从小往大排列的。值的比较是字符串比较#(比如说,'10' < '9')
@all_keys = sort{$h{$a} cmp $h{$b}} (keys %h);


[b]判断hash是否包含key[/b]
exists($h{$key}); 


[b]Hash的长度[/b]
想要知道一个hash存放多少数据
$hash_size = keys %h # 把%h的长度放到$hash_size中print scalar kes %h, "\n" # 打印%h的长度。这里用了scalar来返回数组长度。


[b]遍历一个hash[/b]
while (my ($k, $v) = each %h) {print "$k ---> $v\n";} 

foreach my $key (keys %$hostStatus) {
print "The key is $key and value is $hostStatus->{$key}.";
}


[b]Reference引用[/b]

Reference类似于C/C++的指针
$h_ref = \%h; # 获得一个hash的reference
%aHash = %{$h_ref};# 把hash reference当成hash用
$value = $h_ref->{akey} # 这个和%h{akey}是一样的


[b]传递hash到函数[/b]
一般都是传递一个reference到函数
%h = ();
$h{a}=1;
foo(\%h)
print $h{b}, "\n"; # 打印出2。这个值来自于函数foo()

sub foo {
my ($h) = @_;
print $h->{a}, "\n"; # 打印出1$h->{b} = 2;
}


[b]函数返回hash,或者hash引用(hash reference)[/b]

函数可以返回hash
sub foo {
my %fh;
$fh{a} = 1;
return %h;
}
my %h = foo();
print "$h{a}\n"; #打印出 1

但是这样等于把整个hash从%fh复制到了%h,效率比较低。可以考虑返回hash的引用:
sub foo {
my %fh;
$fh{a} = 1;
return \%fh;
}
my $hr = foo();
print "
$hr->{a}\n" #打印出 1
my %h = %{foo()} # 如果就是想复制,也可以用这种方法


from:http://lmylvmingyue.blog.163.com/blog/static/46601701201031551731661/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值