[sf-perl] Happy fun sorting problem
Chris Palmer
chris at noncombatant.org
Fri Jun 10 13:07:46 PDT 2005
David Fetter writes:
> > To further complicate things, the "Category" level is being sorted
> > according to an external ordering list and not alphabetically.
>
> perldoc perlfaq4 goes into this in detail :)
Thanks for the pointer, David; I hadn't seen that one before.
It gives the answer I was going to give:
@sorted = sort { field1($a) <=> field1($b) ||
field2($a) cmp field2($b) ||
field3($a) cmp field3($b)
} @data;
which I find quite elegant. In Josh's case, he'll want to use the
literal Subcategory and Item values in the cmp/<=> expressions, instead
of fieldX functions. For the Category sorting, which he notes is ordered
according to an external list, I would replace the first compare
statement in the above with:
%category_order = (foo => 1, bar => 2, ...);
...
@sorted = sort {
$category_order{$ctgry_a} <=> $category_order{$ctgry_b} ||
other comparisons ... } @data;
More information about the SanFrancisco-pm
mailing list