Как выполнить «внутреннее объединение значений» в Perl - PullRequest
0 голосов
/ 16 октября 2019

У меня есть два массива в Perl, которые мне нужно объединить в один на основе значения их первого третьего столбца, как описано ниже;

Array1:

0 1 3 some text

0 1 6 more text

1 2 0 and more

Array2:

0 1 3 where missing on page2

1 2 0 to do with it

0 1 6 to read on tuesday

И я хочу достичь:

0 1 3 some text where missing on page2

0 1 6 more text to read on tuesday

1 2 0 and more to do with it

Не могли бы вы помочь и дать некоторые объяснения, где это необходимо?

1 Ответ

1 голос
/ 16 октября 2019

Добро пожаловать в переполнение стека. Вы должны опубликовать то, что вы уже пробовали :) тогда люди поймут и помогут / решат вашу проблему.

Если я понял вашу проблему, давайте рассмотрим, у вас есть массив массивов, как показано ниже. Мы должны сравнить оба массива до указанного значения индекса. Поэтому я использовал имя переменной с именем $matchedColums. Затем мы должны сделать вложенный цикл для сравнения обоих значений массива.

Итак, что я сделал, так это то, что я получил значения из данного индекса и сравнил оба значения и поместил их в другой массив. Тогда вы можете получить новый массив ..

use warnings;
use strict;
use Data::Dumper;

my $array =  [["0","1","3","some text"], ["0","1","6","more text"], ["1","2","0","and more"]];

my $array1 =  [["0","1","3","where missing on page2"], ["0","1","6","to do with it"], ["1","2","0","to read on tuesday"]];

my $matchedColums = 3;
my $mc = $matchedColums-1;


my @finalArray ;

for my $a1 (@{$array}){ #Iterating loop for array elements.

    my $matchA1 = join ( "" , @{$a1}[0..$mc] );    # joining the elements from the given index
    my @a2String;

    for my $a2 (@{$array1}){
        my $matchA2 = join ( "" , @{$a2}[0..$mc] );    
        if ($matchA1 == $matchA2) { 
            @a2String = @{$a2}[$mc+1..$#$a2];
            last;
        }
    }

    my @fn = (@{$a1}, @a2String);
    push @finalArray, \@fn; #pushing it as an array reference.

}

print Dumper \@finalArray;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...