hash - 使用 "each"迭代哈希时添加新成员

标签 hash perl perl5.10

在 perl 5.10.1 中,可以在使用 each 运算符迭代哈希时向哈希添加新成员吗?

史密斯。就像这段代码(为 Google 图表准备数据)一样,我有一个数组哈希值的哈希值,并且我试图移动每个数组的最后一个元素:

sub split_aclr($) {
        my $csvData = shift;

        while (my ($csv, $href) = each %$csvData) {
                next unless $csv =~ /_ACLR_/i;
                my $len = scalar @{$href->{MEASUREMENT}};

                if ($len > 1 && $href->{MEASUREMENT}->[$len - 1] eq 'CARRIER_CHANNEL') {
                        while (my ($key, $arr) = each %$href) {
                                my $moved = pop @$arr;
                                $csvData{$csv . '_CARRIER_CHANNEL'} = {$key => [ $moved ]};
                        }
                }
        }

}

最佳答案

在使用 each 迭代哈希时添加或删除哈希条目通常并不安全。如果您想这样做,最好将要迭代的键的显式列表保存到数组中,然后对其进行循环。

而不是

while (my $k, $v) = each %hash) {
  $hash{"foo_$k"} = $v;
}

my @keys = keys %hash;
for my $k (@keys) {
  my $v = $hash{$k};
  $hash{"foo_$k"} = $v;
}

关于hash - 使用 "each"迭代哈希时添加新成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571707/

相关文章:

delphi - 不区分大小写的 Bob Jenkins 哈希?

c# - 从一个密码派生多个 key 是否安全?

perl - 在 Perl 中将带参数的子程序插入堆栈

perl - 在 Perl 中,一个值可以未初始化但仍被定义吗?

Perl 信号处理程序在 END block 中重置

cocoa-touch - CC_SHA1 之后的 NSData 到 NSString

c++ - 为查找优化的 HashMap

bash - 如何删除文件中除第一个匹配行之外的重复行

linux - Bash 脚本到带有彩色线条的 tail -f

perl - 在使用 ("1"时,无法使用字符串 "strict refs") 作为子例程引用