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 教程。