[英]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.