如何获取Perl中第二个散列数组中不存在的第一个散列数组的元素

时间:2014-11-27 13:01:20

标签: arrays perl hash

如何获取第二个哈希值中不存在的第一个哈希数组的元素。 例如,我有两个哈希数组:

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'},
];

1 个答案:

答案 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 ];