Perl Hash
散列是一组键-值对。Perl存储散列的元素,以便根据其键值来搜索这些值。哈希变量以”%”符号开始。
Perl要求散列的键必须是字符串,而值可以是任何标量。这些值可以是数字、字符串或引用。如果使用非字符串的值作为键,则会产生一个意外的结果。
一个哈希键必须是唯一的。如果一个新的键值对被添加到散列中,而该键是存在的,那么它的对应值将被覆盖。
创建哈希值
有许多方法来初始化哈希变量,如下所示。
- 如下图所示,直接赋值,并将数据添加到现有的哈希值中。
$stud{'Comp'} = 45;
$stud{'Inft'} = 42;
$stud{'Extc'} = 35;
- 另一种方法是使用列表,通过采取单独的对来转换为哈希。对中的第一个元素被用作键,而第二个元素被用作值。
%stud = ('Comp', 45, 'Inft', 42, 'Extc', 35);
- 一种方法是用 **= > **来表示键/值对,如下所示。
%stud = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
- 另一种做同样事情的方法如下所示。这里所有的键前面都有连字符(-),所以不需要在它们周围加引号。只有当单词中没有空格时,才能用这种方法建立哈希。
%stud = (-Comp => 45, -Inft => 42, -Extc => 35);
访问哈希元素
要访问哈希中的单个元素,变量的前缀是美元符号($),然后在变量名称后面的大括号中附加元素的键。
下面的例子说明了上面解释的创建哈希的所有方法。
例子:
#!/usr/bin/perl
# Initializing Hash1 by
# directly assigning values
stud1{'Comp'} = 10;stud1{'Inft'} = 20;
stud1{'Extc'} = 30;
# printing elements of stud
print "Printing values of Hash1\n";
print "stud1{'Comp'}\n";
print "stud1{'Inft'}\n";
print "stud1{'Extc'}\n";
# Initializing Hash2 by taking
# individual pairs
%stud2 = ('Comp', 15, 'Inft', 18, 'Extc', 22);
# Extracting values using keys
print "\nPrinting values of Hash2\n";
print "computer = stud2{'Comp'}";
print "\ninft =stud2{Inft}";
print "\nextc = stud2{'Extc'}\n";
# Initializing Hash3 using '=>'
%stud3 = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
# printing elements of stud3
print "\nPrinting values of Hash3\n";
print "stud3{'Comp'}\n";
print "stud3{'Inft'}\n";
print "stud3{'Extc'}\n";
# Initializing Hash4 using hyphen(-)
%stud4 = (-Comp => 5, -Inft => 15, -Extc => 25);
# Printing elements of stud4
print "\nPrinting values of Hash4\n";
print "stud4{'-Comp'}\n";
print "stud4{'-Inft'}\n";
print "$stud4{'-Extc'}";
输出
Printing values of Hash1
10
20
30
Printing values of Hash2
computer = 15
inft = 18
extc = 22
Printing values of Hash3
45
42
35
Printing values of Hash4
5
15
25
提取键和值
有时需要提取散列的键和值,以便对其进行各种操作。像元素的修改、删除、添加等操作。哈希允许使用内置的函数来提取这些键和值。
使用 keys 函数可以从哈希中获取所有键的列表。
语法: keys %HASH
返回HASH中存在的所有键的数组。
例子
# Initializing Hash with Key-Value pairs
%stud = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
# Extracting keys from hash
@Key_array = keys %stud;
# Printing the extracted keys
print "Keys are :\n";
print "Key_array[0]\n";
print "Key_array[1]\n";
print "$Key_array[2]\n";
输出
Keys are :
Comp
Extc
Inft
同样, values 函数用于获取所有值的列表。
语法: values %HASH
返回一个包含HASH所有值的数组。
例子
# Initializing Hash with Key-Value pairs
%stud = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
# Extracting values from hash
@value_array = values %stud;
# Printing the extracted values
print "Values are :\n";
print "value_array[0]\n";
print "value_array[1]\n";
print "$value_array[2]\n";
输出
Values are :
45
35
42