Perl - Hashes(哈希)

首页 / Perl入门教程 / Perl - Hashes(哈希)

哈希是一组键/值对。哈希变量前面带有百分号()。要引用哈希的单个元素,您将使用哈希变量名称,其前面带有" $"符号,之后是与大括号中的值相关联的"key"。

这是使用哈希变量的简单示例-

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'}=$data{'John Paul'}\n";
print "\$data{'Lisa'}=$data{'Lisa'}\n";
print "\$data{'Kumar'}=$data{'Kumar'}\n";

这将产生以下输出-

$data{'John Paul'}=45
$data{'Lisa'}=30
$data{'Kumar'}=40

创建哈希

哈希是通过以下两种方式之一创建的。在第一种方法中,您要一个一个地为命名键分配一个值-

$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;

在第二种情况下,您使用一个列表,该列表是通过从列表中选取单个对来转换的:该对中的第一个元素用作键,第二个元素用作值。如-


为了清楚起见,您可以使用=>作为的别名,以指示键/值对,如下所示:

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

这是上述格式的另一种形式,请看一下,这里所有键前面都带有连字符(-),并且在它们周围都不需要引号-

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

但是请务必注意,只有一个单词,即没有空格键已以这种形式的哈希形成形式使用,并且如果您以这种方式创建哈希,则只能使用连字符来访问键,

$val = %data{-JohnPaul}
$val = %data{-Lisa}

访问哈希

从哈希访问单个元素时,必须在变量前加一个美元符号($),然后在变量名后的大括号内附加元素键。如-

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

这将产生以下输出-

45
30
40

哈希切片

您可以提取哈希的切片,就像可以从数组中提取切片一样。您将需要使用@用于存储返回值的变量的前缀,因为它们将是值列表-

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

这将产生以下输出-

Array : 45 30

提取键和值

您可以使用 keys 函数从哈希中获取所有键的列表,该函数具有以下语法-

keys %HASH

此函数返回命名哈希的所有键的数组。以下是示例-

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

这将产生以下输出-

Lisa
John Paul
Kumar

同样,您可以使用 values 函数获取所有值的列表。此函数具有以下语法-

values %HASH

此函数返回一个普通数组,其中包含命名哈希的所有值。以下是示例-

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

这将产生以下输出-

30
45
40

判断KEY是否存在

如果您尝试从不存在的散列中访问键/值对,通常会得到 undefined 值,并且如果打开了警告,则会得到警告在运行时生成。您可以使用 exists 函数解决此问题,该函数如果命名键存在,则返回true,而不管其值可能是什么-

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

在这里,我们介绍了IF ... ELSE语句,将在单独的章节中进行研究。现在,您仅假设 if(condition)部分将仅在给定条件为true时执行,否则将执行 else 部分。因此,当我们执行上述程序时,它会产生以下输出,因为给定条件 exists($data{'Lisa'})返回true-

Lisa is 30 years old

获取哈希大小

您可以通过使用键或值上的Scalar矢量上下文来获取大小,即哈希中元素的数量。简单地说,首先您必须获得一个包含键或值的数组,然后可以按如下所示获取数组的大小:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

@values = values %data;
$size = @values;
print "2 - Hash size:  is $size\n";

这将产生以下输出-

1 - Hash size: is 3
2 - Hash size: is 3

添加和删除元素

使用简单的赋值运算符,只需一行代码即可添加新的键/值对。但是要从哈希中删除元素,您需要使用 delete 函数,如下示例所示-

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size:  is $size\n";

# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size:  is $size\n";

这将产生以下输出-

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

算法面试通关40讲 -〔覃超〕

玩转Git三剑客 -〔苏玲〕

接口测试入门课 -〔陈磊〕

架构实战案例解析 -〔王庆友〕

技术面试官识人手册 -〔熊燚(四火)〕

性能优化高手课 -〔尉刚强〕

说透元宇宙 -〔方军〕

技术领导力实战笔记 2022 -〔TGO 鲲鹏会〕

结构思考力 · 透过结构看思考 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)