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次
基本用法
# 初始化 %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次
相关文章推荐
- perl哈希hash的常见用法介绍
- perl hash 常见用法
- Perl 哈希Hash用法之入门教程
- Perl中hash的用法
- hash 在 perl 中的用法
- Perl Hash用法之入门教程
- Hash字符串常见用法总结 (HDU 1800 or map)
- perl-hash的用法
- Perl Hash用法之入门教程
- 常见HASH加密、判断
- 枚举的常见用法
- perl中如何将按hash的排序方法
- ubuntu常见不常见用法(不定期更新)
- JTable常见用法细则--推荐
- eclipse常见用法
- jquery 选择器的常见的用法
- PyCharm常见用法
- [js高手之路] vue系列教程 - vue的基本用法与常见指令(1)
- struct的用法--------C语言结构体(struct)常见使用方法(转载)
- canvas的常见用法