Ga naar inhoud

[PERL] arrays vergelijken..


anoniem

Aanbevolen berichten

Hallo, Ik heb twee arrays met getalletjes (allebei gesorteerd) en nu wil ik graag deze twee arrays vergelijken.. Ik wil graag de elementen die overeenkomen en ook diegen die verschillen (per array). Heeft iemand misschien aanwijzingen hoe ik dit zou kunnen aanpakken? De meeste oplossingen die ik tot nu toe gevonden heb, komen meestal neer op element voor element vergelijken, maar dat si eigenlijk niet de manier waarop ik het graag zou willen. TIA. Robert
Link naar reactie
Hoi, Geen pasklaar antwoord, maar wellicht heb je er iets aan? Je zou grep() slim kunnen gebruiken. Wordt dan iets als: [code:1:e429305498] my @array1 = ( 1, 2, 3, 5, 7, 8, 9 ); my @array2 = ( 1, 3, 4, 5, 6, 7, 9 ); my @array_same = grep { grep(/^$_$/, @array2); } @array1; map { print $_." "; } @array_same; [/code:1:e429305498] Bovenstaande is NIET getest - gaat om het idee. Zelfde principe - mits aangepast- geldt ook voor het achterhalen van de verschillen. Misschien is http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch04_09.htm nog zinvol?
Link naar reactie
Als je nu door @array1 heen loopt en je houd een pointer bij die aangeeft welk element van @array2 een waarde heeft die hoger is dan de huidige waarde van @array1. Dan duurt de hele operatie O(n) i.p.v. O(nxm). [code:1:936af0264e] my $index2 = 0; for (my $index1 = 0; $index1 <= $#aray1; $index1++) { (my $cv, $index2) = CompareValues($index1, $index2) if ($cv == 0) { ### Match, dus ($array1[$index1] == $array2[$index2]) } } sub CompareValues($$) { my $index1 = shift; ### deze is vast en mag niet veranderd worden my $index2 = shift; ### Deze mag aangepast worden. if ($array1[$index1] < $array2[$index2]) { ### Doe niets return (-1, $index2) } elsif ($array1[$index1] == $array2[$index2]) { ### Hee, deze waarde zit in beide arrays return (0, $index2) } elsif ($array1[$index1] > $array2[$index2]) { ### Increment $index2 en check nogmaals CompareValues($index1, $index2++); } } [/code:1:936af0264e] Deze code is NIET GETEST en werkt dus waarschinlijk niet, het gaat om het idee.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...