perl 语言中的哈希(%)68


哈希是 Perl 语言中用于存储键值对的数据结构。每个键值对由一个唯一的键和一个值组成,键通常是一个字符串,而值可以是任何数据类型。

创建哈希

要创建哈希,可以使用以下语法:```
my %hash = (
'foo' => 'bar',
'baz' => 'qux',
);
```

也可以使用 new 方法手动创建哈希:```
my %hash = %new;
```

访问哈希元素

可以通过使用键作为数组索引来访问哈希元素:```
my $value = $hash{'foo'};
```

也可以使用 get 方法:```
my $value = $hash->get('foo');
```

添加和删除哈希元素

可以通过将值分配给键来添加哈希元素:```
$hash{'new_key'} = 'new_value';
```

要删除哈希元素,可以使用 delete 方法:```
delete $hash{'key_to_delete'};
```

遍历哈希

可以使用以下方法遍历哈希:* keys:返回哈希中所有键的列表。
* values:返回哈希中所有值的列表。
* each:返回键值对的元组,用于迭代哈希。
```
foreach my $key (keys %hash) {
print "$key => $hash{$key}";
}
```

哈希常用函数

Perl 提供了几个用于处理哈希的函数:* keys:返回哈希中所有键的列表。
* values:返回哈希中所有值的列表。
* exists:检查给定的键是否存在于哈希中。
* clear:删除哈希中的所有元素。
* copy:创建哈希的浅拷贝。

哈希 slice

可以使用哈希切片同时访问哈希中的多个值:```
my @values = @hash{'foo', 'bar', 'baz'};
```

这等效于:```
my @values = ($hash{'foo'}, $hash{'bar'}, $hash{'baz'});
```

哈希迭代器

Perl 5.24 引入了哈希迭代器,它提供了遍历哈希的更简洁的方式:```
for my $key_value_pair (%hash) {
my ($key, $value) = @$key_value_pair;
print "$key => $value";
}
```

哈希键比较

默认情况下,哈希键是通过字符串比较进行比较的。但是,可以通过覆盖 UNIVERSAL::require 分组中的比较操作(eq、ne、gt、lt、ge、le、cmp)来更改比较行为。

例如,要使用数字比较哈希键,可以执行以下操作:```
BEGIN {
*UNIVERSAL::require::eq = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] eq $_[1] };
*UNIVERSAL::require::ne = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] ne $_[1] };
*UNIVERSAL::require::gt = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] gt $_[1] };
*UNIVERSAL::require::lt = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] lt $_[1] };
*UNIVERSAL::require::ge = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] ge $_[1] };
*UNIVERSAL::require::le = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] le $_[1] };
*UNIVERSAL::require::cmp = sub { ref $_[0] || $_[0] ~~ ref $_[1] || $_[0] cmp $_[1] };
}
```

哈希与数组

哈希与数组是 Perl 中两种不同的数据结构。哈希通过键而非索引访问其元素,而数组通过索引访问其元素。哈希更适合存储唯一键关联的值,而数组更适合存储线性排列的数据。

在需要基于唯一键快速查找值的情况下,使用哈希是明智的。在需要对数据进行顺序访问的情况下,使用数组是明智的。

2024-11-30


上一篇:Perl语言中的 for 循环

下一篇:调用 Perl 脚本