Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[PERL] Vergelijken van 4 arrays

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb 4 arrays met duizenden elementen van strings.

Nu wil ik van die 4 arrays een nieuwe lijst maken, maar alleen een lijst met intersectie tussen de 4 arrays.

Nu heb ik op de Perl FAQ gevonden hoe je dit kunt doen met 2 arrays.

code:
1
2
3
4
5
6
7
    @union = @intersection = @difference = ();
    %count = ();
    foreach $element (@array1, @array2) { $count{$element}++ }
    foreach $element (keys %count) {
    push @union, $element;
    push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
    }


Een probleem is echter dat het voor mij een voorwaarde is dat de volgorde van de arrays bewaard blijft. Met een hash verdwijnt de ordening van de 4 arrays, wat een probleem is omdat ik een ranked list van elementen heb. Ik heb gezocht op Tweakers en Google, maar heb geen manier gevonden om dit te kunnen doen.

Verwijderd

"Met een hash verdwijnt de ordening van de 4 arrays, wat een probleem is omdat ik een ranked list van elementen heb."

kun je de ranking niet als key van je hash gebruiken?

wacht ff, je hebt natuurlijk 4 arrays met ieder een eigen ranking. wat gebruik je nu als key van je hash(es)? heb je misschien een voorbeeld van de te verwerken gegevens?

[ Voor 34% gewijzigd door Verwijderd op 14-08-2007 18:22 ]


  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Je kan toch een vijfde resultaat array aanmaken.

Vervolgens pak je Array 1 als hoofdarray. Je neemt ellement 1, kijkt met een loop door array 2, kijkt of er een element is wat gelijk is aan element 1 van array 1, zo ja ga je naar array 3, loop deze ook, en kijk of er een element is identiek aan element 1 van array 1. Als het element al niet in array 2 terug te vinden is , is er dus geen intersectie. Ik neem aan dat je een intersectie wilt van alle vier de arrays, dus de waarde van een element moet in alle vier de arrays terug te vinden zijn ?

Je zou kunnen zeggen dat dit langzaam is, maar eigenlijk is het hetzelfde wat perl ook zou doe met een specifiek intersectie command, alleen het command zal wat beter zijn omdat die erop is gemaakt.. Alleen over vier arrays zal het zeker wat tijd met zig mee brengen.

Andere manier zou kunnen zijn dat je eerst intersectie opmaakt in een tijdelijke array tussen 1 en 2, en in een tweede tijdelijke array tussen 3 en 4. Vervolgens de intersectie zoekt tussen tijdelijk 1 en tijdelijk 2 deze stop je weer in een resultaat array.