簡體   English   中英

如何在perl中合並兩個包含數組引用的數組引用?

[英]How to union two array references containing array references in perl?

假設我有一個數組引用,看起來像-

my $arrayref1 = [[1,2], [3,4], [5,6]];

而且,我還有另一個數組引用為-

my $arrayref2 = [[1,2], [3,4], [7,8]];

我如何實現這樣的目標-

push @{$arrayref1}, @{$arrayref2};

這樣arrayref1將看起來像這樣(不包括包含公共元素的數組引用)-

$arrayref2 = [[1,2], [3,4], [5,6], [7,8]];

使用哈希散列表示聯合的現有元素:

#!/usr/bin/perl
use warnings;
use strict;

my $arrayref1 = [[1,2], [3,4], [5,6]];
my $arrayref2 = [[1,2], [3,4], [7,8]];

my %set;
undef $set{ $_->[0] }{ $_->[1] } for @$arrayref1;

my @union = @$arrayref1;

for my $pair (@$arrayref2) {
    push @union, $pair unless exists $set{ $pair->[0] }{ $pair->[1] };
    undef $set{ $pair->[0] }{ $pair->[1] };
}

use Data::Dumper;
print Dumper \@union;

這將按照您的要求

use strict;
use warnings 'all';

my $arrayref1 = [[1,2], [3,4], [5,6]];
my $arrayref2 = [[1,2], [3,4], [7,8]];

my $result = meld($arrayref1, $arrayref2);

print join (', ', map { sprintf "[%d,%d]", @$_ } @$arrayref1), "\n";

sub meld {
    my ($a1, $a2) = @_;
    my %uniq;

    $uniq{"@$_"} = 1 for @$a1;

    for ( @$a2 ) {
        my $key = "@$_";
        next if $uniq{$key}++;
        push @$a1, [ @$_ ];
    }

    $a1;
}

輸出

[1,2], [3,4], [5,6], [7,8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM