【发布时间】:2014-07-16 17:49:11
【问题描述】:
我有一组存储桶和一组“删除”,可能包含比我感兴趣的集更多/更少的存储桶 - 我正在尝试从带有哈希切片的存储桶中减去删除值,就像这样:
@buckets{keys %buckets} -= @remove{keys %buckets};
但是,似乎只有散列的最后一个元素被修改 - 这显然是不一致的,具体取决于返回散列键的运行时顺序。
这不是使用哈希切片的有效方式吗?
完整代码:
use strict;
use warnings;
use Data::Dumper;
my %buckets = (
a => 100,
b => 200,
c => 300,
d => 400,
);
my %remove = (
a => 1,
b => 2,
c => 3,
d => 4,
);
my %before = %buckets;
@buckets{keys %buckets} -= @remove{keys %buckets};
# my @keys = keys %buckets;
# @buckets{@keys} -= @remove{@keys}; # Gives same behavior
warn Data::Dumper->Dump([ \%buckets ], ['buckets_after']);
样本输出:
% perl perltest.pl
$buckets_after = {
'd' => 400,
'c' => 300,
'a' => 100,
'b' => 198
};
% perl perltest.pl
$buckets_after = {
'c' => 300,
'd' => 400,
'b' => 200,
'a' => 99
};
% perl perltest.pl
$buckets_after = {
'a' => 100,
'd' => 400,
'b' => 200,
'c' => 297
};
【问题讨论】: