Perl 哈希
最后修改于 2023 年 8 月 24 日
Perl 哈希教程演示了如何在 Perl 中使用哈希。
哈希是一种标量关联数组。它是一组键/值对。每个值由其键唯一标识。
哈希是一种基本的 Perl 数据类型。数据类型是一组值以及可以对这些值进行的操作。
在 C# 或 Python 等其他编程语言中,哈希通常称为字典。
Perl 使用 % 符号来定义哈希。
my %words = (0=>'sky', 1=>'tommorrow', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
可以使用 => 字符在字面哈希声明中分隔键和值。
Perl 简单哈希
在下面的示例中,我们处理一个简单的哈希。
#!/usr/bin/perl
use warnings;
use 5.30.0;
my %words = (0=>'sky', 1=>'tommorrow', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
say $words{0};
say $words{1};
say $words{5};
say '-----------------';
say map { "$_ $words{$_}\n" } keys %words;
say '-----------------';
$, = ' ';
my @keys = keys %words;
my @values = values %words;
say @keys;
say @values;
在示例中,我们定义了一个单词哈希。我们打印单个值、键/值对以及哈希的键和值。
my %words = (0=>'sky', 1=>'tommorrow', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
定义了一个 Perl 单词哈希。该哈希使用 % 字符。
say $words{0};
我们打印存储在键 0 下的值。当我们引用哈希的单个值时,我们使用 $ 符号和一对花括号 {}。
say map { "$_ $words{$_}\n" } keys %words;
使用 map 函数,我们打印哈希的所有键/值对。
my @keys = keys %words;
使用 keys 函数,我们获取哈希的键。
my @values = values %words;
使用 values 函数,我们获取哈希的值。
$ ./simple.pl sky tommorrow forest ----------------- 2 blue 4 work 3 pink 5 forest 0 sky 1 tommorrow ----------------- 2 4 3 5 0 1 blue work pink forest sky tommorrow
Perl 哈希大小
在下面的示例中,我们确定哈希的大小。
#!/usr/bin/perl
use warnings;
use 5.30.0;
my %words = (0=>'sky', 1=>'tommorrow', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
my $n = keys %words;
say "the hash has $n items";
要获取哈希的大小,我们在标量上下文中使用了 keys 函数。
$ ./hash_size.pl the hash has 6 items
Perl 添加和删除元素
在下一个示例中,我们展示了如何在哈希中添加和删除元素。
#!/usr/bin/perl
use warnings;
use 5.30.0;
use Data::Dumper;
my %words = ();
$words{0} = 'sky';
$words{1} = 'rock';
$words{2} = 'bed';
say Dumper(\%words);
delete $words{2};
say '---------------------';
say Dumper(\%words);
%words = ();
say '---------------------';
say Dumper(\%words);
首先,我们初始化一个空哈希。我们向哈希中添加三个键值对,删除一个键值对,最后清空哈希。我们使用 Data::Dumper 显示哈希的内容。
my %words = ();
初始化了一个空哈希。
$words{0} = 'sky';
$words{1} = 'rock';
$words{2} = 'bed';
我们向哈希中添加了三个键/值对。
delete $words{2};
使用 delete 函数删除一个键值对。
%words = ();
我们清空了哈希。
$ ./add_remove.pl
$VAR1 = {
'2' => 'bed',
'1' => 'rock',
'0' => 'sky'
};
---------------------
$VAR1 = {
'1' => 'rock',
'0' => 'sky'
};
---------------------
$VAR1 = {};
Perl 哈希迭代
我们可以使用 for 和 foreach 关键字迭代哈希项。
#!/usr/bin/perl
use warnings;
use 5.30.0;
my %words = (0=>'sky', 1=>'tommorrow', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
foreach my $v (values %words){
say $v;
}
say '----------------';
foreach my $k (keys %words){
say $k;
}
say '----------------';
for (keys %words) {
print("$_: $words{$_}\n");
}
在示例中,我们迭代了一个单词哈希。
$ ./iterate.pl blue sky pink tommorrow work forest ---------------- 2 0 3 1 4 5 ---------------- 2: blue 0: sky 3: pink 1: tommorrow 4: work 5: forest
Perl 哈希排序
使用 sort 函数,我们可以按键或值对哈希项进行排序。默认情况下,哈希项是无序的。
#!/usr/bin/perl
use warnings;
use 5.30.0;
my %words = (0=>'sky', 1=>'tommorrow', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
foreach my $v (sort values %words){
say $v;
}
say '----------------';
foreach my $v (reverse sort values %words){
say $v;
}
say '----------------';
foreach my $k (sort keys %words){
say $k;
}
say '----------------';
foreach my $k (reverse sort keys %words){
say $k;
}
在示例中,我们使用 sort 和 reverse 函数按升序和降序对哈希的键和值进行排序。
$ ./sorting.pl blue forest pink sky tommorrow work ---------------- work tommorrow sky pink forest blue ---------------- 0 1 2 3 4 5 ---------------- 5 4 3 2 1 0
Perl 比较哈希
使用 Data::Compare 模块,我们可以比较 Perl 数据结构。
#!/usr/bin/perl
use warnings;
use 5.30.0;
use Data::Compare;
my %h1 = (
0 => ('a', 'b', 'c'),
1 => ('d', 'e', 'f'),
);
my %h2 = (
0 => ('a', 'b', 'c'),
1 => ('d', 'e', 'f'),
);
if (Compare(\%h1, \%h2)) {
say 'the two hashes are equal';
} else {
say 'the two hashes are not equal';
}
该示例使用 Data::Compare 比较了两个哈希。
if (Compare(\%h1, \%h2)) {
Compare 函数接受两个哈希引用作为参数。
$ ./comparing.pl the two hashes are equal
Perl 哈希切片
可以从哈希中提取值列表。
#!/usr/bin/perl
use warnings;
use 5.30.0;
my %words = (0=>'sky', 1=>'cup', 2=>'blue', 3=>'pink',
4=>'work', 5=>'forest');
my ($first, $second) = @words{(0, 1)};
say $first;
say $second;
在示例中,我们从单词列表中提取了两个单词。
my ($first, $second) = @words{(0, 1)};
我们使用 @ 符号来获取切片。
$ ./hash_slice.pl sky cup
在本文中,我们学习了 Perl 中的哈希数据类型。
作者
列出 所有 Perl 教程。