perl学习(6) 哈希
哈希在perl里是很重要的数据结构,现在想想定义三种变量:
1,标量,就是c中的变量:$name
2,列表,就是数组:@list
3,哈希,形式上就是c中的map:%hash
1.1.定义
假设 Perl 仅限于处理少量的 key/value 对,则其运行效率很高。即使包含数百万个 key/value 对时,《The Perl Journal》依然能够保持高效的运行效率。对于大量 key 的 hash 表来说,《The Perl Journal》的性能表现仍然良好。
特点:
-
当将某个值存储在已经存在的hash 元素中,以前的值会被覆盖
-
如果没有存放值,则其返回undef。
#! /usr/bin/perl
use strict ;
use warnings ;
#声明
my %family_name;
$family_name{"xiaowei"} = "huang";
$family_name{"jialin"} = "wang";
$family_name{"areu"} = "who";
#初始化
my %color = ("red"=>1 , "yellow"=>2,"black"=>3 ) ;
1.2.函数
#hash function
1.2.1. keys,values
my @hashks = keys %color ; #返回所有的key
my @hashvs = values %color ; #返回所有的value
在标量context范围内,在这些函数返回hash中元素的数量(key/value)。此操作无需遍历所有hash中的元素,并且其效率很高。
my $size = keys %color ; #得到3,是指有3 个key/value 对
1.2.2. each 函数
我们通常会遍历每个hash表中的所有键值对(例如查看每个键值对),常见的方式是调用each函数,它会生成包含键/值的一对二元组序列。
实践中,一般只在while 循环中使用each:
while ((key, value) = each %hash){
print “key => value\n”;
}
#有序输出
foreach my $key (sort keys %color)
{
print "key=>",color{"$key"},"\n";
}
1.2.3. exists 函数
如何判断hash中包含某个特定的key可以通过调用该函数来实现。当该特定的key存在于hash中时会返回true需要注意的是这与是否有对应的value无关。
if(exists books{dino}){
rint “Hey, there’s a libaray card for dino!\n”;
}
1.2.4. delete 函数
删除操作会对指定键及其相关值进行处理,并将其从哈希表中移除。若该键不存在于其中,则不做任何处理,并会给出相应的提示信息。
my $person = “betty”;
delete books{person};
