in reply to How to Order an Array's Elements to Match Another Array's Element Order
Hello ozboomer,
Perl’s built-in sort function accepts a custom subroutine to do the comparisons. Here is one using the first_index function from List::MoreUtils:
use strict; use warnings; use Data::Dump; use List::MoreUtils qw( first_index ); my @fruit = qw( APPLE ORANGE PEACH GRAPE BANANA PINEAPPLE ); my @subset = qw( PINEAPPLE GRAPE APPLE ); #my @subset = qw( PINEAPPLE GRAPE PEACH BANANA APPLE ORANGE ); my @results = sort fruit_order @subset; dd \@results; sub fruit_order { (first_index { $a eq $_ } @fruit) <=> (first_index { $b eq $_ } @fruit); }
Output:
18:00 >perl 2017_SoPW.pl ["APPLE", "GRAPE", "PINEAPPLE"] 18:04 >
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
|
|---|