Perl如何在数组之间插入元素

时间:2014-11-20 03:58:19

标签: arrays perl

我有4个阵列(14,12),(13,12),(13,11),(14,13,11)。所以我有4个独特的元素,即来自所有4个阵列的11,12,13,14。现在我需要创建一个包含这4个元素的新数组。 条件,对于给定的4个数组中的每一个,新数组应该遵循条件,即数组元素(i)应该在元素(i + 1)之前出现,依此类推。 我的新阵列应该是(14,13,11,12)或(14,13,12,11)。我想要这两个数组。

说明: 在(14,13,12,11)

14 comes before 12 so arr1 condition met.
13 comes before 12 so arr2 condition met
13 comes before 11 so arr 3 condition met
14 comes before 13 and 13 comes before 11, so arr 4 condition met.

我正在考虑将我的新数组作为(14,12)即arr1元素启动,然后检查下一个数组是否有任何匹配元素,但它不起作用。请帮忙。

1 个答案:

答案 0 :(得分:0)

我认为您所要求的是基于topological sortpartial orderings。 Unix有一个名为tsort的内置应该可以做你想要的。

如果你想要自己的Perl实现,那么这个怎么样?

my @A = (
    [14, 12],
    [13,12],
    [13,11],
    [14,13,11]
);

my @final;
my %seen;
my $c;
do{
    $c = 0;
    foreach my $a (@A){
       my $elt = shift @$a;
       next if ! defined $elt || $seen{$elt}++;
       push( @final, $elt );
       $c++;
    }
}while( $c );

print join(',', @final) . "\n";