在Perl中,我该如何处理整个哈希表?

7
1个回答

7

我是一名有用的助手,可以为您翻译文本。

以下是需要翻译的内容:

(这是官方perlfaq答案,不包括任何后续编辑)

有几种方法可以处理整个哈希表。您可以获取列表,然后遍历每个键,或者逐个获取一个键值对。

要遍历所有键,请使用keys函数。它提取哈希表的所有键并将它们作为列表返回给您。然后,您可以通过正在处理的特定键获取该键的值:

foreach my $key ( keys %hash ) {
    my $value = $hash{$key}
    ...
    }

一旦您拥有键列表,您可以在处理哈希元素之前处理该列表。例如,您可以对键进行排序,以便按字典顺序处理它们:

foreach my $key ( sort keys %hash ) {
    my $value = $hash{$key}
    ...
    }

或者,你可能只想处理其中的一些项。如果你只想处理以text:开头的键,你可以使用grep选择这些键:

foreach my $key ( grep /^text:/, keys %hash ) {
    my $value = $hash{$key}
    ...
    }

如果哈希表非常大,您可能不想创建一个很长的键列表。为了节省一些内存,您可以使用each()逐个获取一个键值对,它会返回一个您尚未看到的键值对:
while( my( $key, $value ) = each( %hash ) ) {
    ...
    }

每个操作符以显然随机的顺序返回对,因此如果顺序很重要,则必须坚持使用keys方法。
但是each()操作符可能有点棘手。在使用时,您不能添加或删除哈希的键,否则可能会在Perl内部重新哈希所有元素后跳过或重新处理某些对。此外,哈希只有一个迭代器,因此如果在同一个哈希上使用keysvalueseach,您可以重置迭代器并破坏处理过程。请参见perlfunc中的each entry以获取更多详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接