如何获取第二个哈希值中不存在的第一个哈希数组的元素。 例如,我有两个哈希数组:
my $arr1 = [
{ id => 1, name => 'element 1'},
{ id => 2, name => 'element 2'},
{ id => 3, name => 'element 3'},
{ id => 4, name => 'element 4'},
{ id => 5, name => 'element 5'},
];
my $arr2 = [
{ id => 1, name => 'element 1'},
{ id => 3, name => 'element 3'},
{ id => 5, name => 'element 5'},
];
结果应该是:
my $arr3 = [
{ id => 2, name => 'element 2'},
{ id => 4, name => 'element 4'},
];
答案 0 :(得分:4)
您可以为查找构建哈希,然后过滤@$arr1
元素
my %seen;
@seen{ map $_->{id}, @$arr2 } = ();
# $seen{$_->{id}} = undef for @$arr2; # or foreach instead of hash slice
my $arr3 = [ grep{ !exists $seen{$_->{id}} } @$arr1 ];