您的位置:首页 > 其它

perl hash 常见用法

2012-01-12 17:34 239 查看
perl hash 常见用法

基本用法

# 初始化 %h为空数组

%h = {};

# 用数组初始化%h为 a=>1, b=>2

%h = ('a', 1, 'b', 2);

# 意义同上,只是另一种更形象化的写法。

%h = ('a'=>1, 'b'=>2);

.

得到hash的所有键值

# 得到所有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);

判断hash是否包含key

exists($h{$key});

Hash的长度

想要知道一个hash有多少<key, value>,常见的方法是得到包含所有键值的数组。这个数组的长度就是hash的长度:<

遍历一个hash中所有的<key, value>

.while (my ($k, $v) = each %h) {

print "$k ---> $v/n";

}

Reference

$h_ref = /%h; # 获得一个hash的reference

%aHash = %{$h_ref};# 把hash reference当成hash用

$value = $h_ref->{akey} # 这个和%h{akey}是一样的

实例:

有一份用户名列表,存储了 10000 个用户名,没有重复项;

还有一份黑名单列表,存储了 2000 个用户名,格式与用户名列表相同;

现在需要从用户名列表中删除处在黑名单里的用户名,要求用尽量快的时间处理。

#!/usr/bin/perl

for(my $i = 0; $i < @arrayN; ++$i)

{

for (my $j = 0; $j < @arrayM; ++$j)

{

if ($arrayN[$i] eq $arrayM[$j])

{

$arrayM[$j] = undef;

}

}

}

两层循环的话要执行10000*2000次

#!/usr/bin/perl

my %arrayHash;

for(my $i = 0; $i < @arrayN; ++$i)

{

$arrayHash{$arrayN[$i]} = 1;

}

for(my $i = 0; $i < @arrayM; ++$i)

{

if ($arrayHash{$arrayM[$i]})

{

$arrayM[$i] = undef;

}

}

现在只需执行10000+2000次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: