2014-11-27 1 views
1

해시 배열의 두 번째 배열에없는 해시의 첫 번째 배열 요소를 가져 오는 방법. 예를 들어, 내가 해시의 두 배열이 :Perl에서 해시 배열의 두 번째 배열에없는 해시 배열의 요소를 얻는 방법

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

왜 배열이 아닌'(id => name)'과 같은 해시를 사용하지 않습니까? – choroba

+1

내 배열은 데이터베이스 쿼리의 결과입니다. 이 배열은 예를 들어 있습니다. – VeroLom

답변

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 ]; 
+1

좋은 샷 mapec! +1 –

+0

그게 좋습니다! 고맙습니다! – VeroLom

+0

@VeroLom Пожалуйста –

관련 문제