哈希表

1. 哈希表简介

哈希表(Hash Table)是一种数据结构,用于存储键值对(key-value pairs)。它通过哈希函数将键映射到表中的一个位置,从而实现快速的查找、插入和删除操作。哈希表在编程中非常常见,尤其是在需要快速查找数据的场景中。

1.1 哈希表的基本概念

  • 键(Key):用于唯一标识一个值的标识符。
  • 值(Value):与键相关联的数据。
  • 哈希函数(Hash Function):将键映射到哈希表中的一个位置的函数。
  • 冲突(Collision):当两个不同的键通过哈希函数映射到同一个位置时,称为冲突。

2. Perl 中的哈希表

在 Perl 中,哈希表被称为“哈希”(Hash)。哈希是一种关联数组,其中每个键都与一个值相关联。哈希在 Perl 中非常强大且易于使用。

2.1 创建哈希

在 Perl 中,哈希使用 % 符号表示。你可以通过以下方式创建一个哈希:

my %hash = (
    "key1" => "value1",
    "key2" => "value2",
    "key3" => "value3",
);

2.2 访问哈希中的值

你可以通过键来访问哈希中的值:

print $hash{"key1"};  # 输出: value1

2.3 添加和修改哈希中的值

你可以通过赋值操作来添加或修改哈希中的值:

$hash{"key4"} = "value4";  # 添加新键值对
$hash{"key1"} = "new_value1";  # 修改现有键的值

2.4 删除哈希中的键值对

你可以使用 delete 函数来删除哈希中的键值对:

delete $hash{"key2"};

2.5 遍历哈希

你可以使用 foreach 循环来遍历哈希中的所有键值对:

foreach my $key (keys %hash) {
    print "$key => $hash{$key}\n";
}

3. 哈希表的实践练习

3.1 练习:统计单词频率

编写一个 Perl 程序,读取一个文本文件,并统计每个单词出现的频率。

use strict;
use warnings;

my %word_count;

# 读取文件内容
open my $fh, '<', 'input.txt' or die "Cannot open file: $!";
while (my $line = <$fh>) {
    chomp $line;
    my @words = split /\s+/, $line;
    foreach my $word (@words) {
        $word_count{$word}++;
    }
}
close $fh;

# 输出单词频率
foreach my $word (sort keys %word_count) {
    print "$word: $word_count{$word}\n";
}

3.2 练习:电话簿

编写一个 Perl 程序,实现一个简单的电话簿。用户可以添加、删除和查找联系人。

use strict;
use warnings;

my %phonebook;

sub add_contact {
    my ($name, $number) = @_;
    $phonebook{$name} = $number;
    print "Contact added: $name - $number\n";
}

sub delete_contact {
    my ($name) = @_;
    if (exists $phonebook{$name}) {
        delete $phonebook{$name};
        print "Contact deleted: $name\n";
    } else {
        print "Contact not found: $name\n";
    }
}

sub find_contact {
    my ($name) = @_;
    if (exists $phonebook{$name}) {
        print "Contact found: $name - $phonebook{$name}\n";
    } else {
        print "Contact not found: $name\n";
    }
}

# 示例操作
add_contact("Alice", "123-456-7890");
add_contact("Bob", "987-654-3210");
find_contact("Alice");
delete_contact("Bob");
find_contact("Bob");

4. 总结

哈希表是一种非常强大的数据结构,适用于需要快速查找和存储键值对的场景。在 Perl 中,哈希表的使用非常直观和灵活。通过本教程,你应该已经掌握了如何在 Perl 中创建、访问、修改和删除哈希表中的数据,并能够应用这些知识解决实际问题。

继续练习和探索,你将能够更深入地理解哈希表的原理和应用,并在编程中更加熟练地使用它们。