in reply to Re: Re: Re: complicated sorting issue
in thread complicated sorting issue

You made the same mistake I did. That's not a Schwartzian Transform (or at least not a proper one). The hash lookup should only be performed once per item being sorted, so we should be tossing the lookup within the first map being performed, rather than within the sort. Not to mention your sort is off now as you are sorting first by color then by size, when the OP wanted size then color. So we should really have something like this:

#!c:/perl/bib/perl -w $|++; use strict; my %map = ( S => 0, M => 1, L => 2, Xl => 3 ); my @sorted = map { $_->[0] } sort { $a->[1] <=> $b->[1] or $a->[2] cmp $b->[2] } map { /^(\w+:\s+(\w+),\s+\w+:\s+(\w+))$/ ? [$1, $map{$2}, $3] : () } <DATA>; print join("\n", @sorted); __DATA__ size: L, color: White size: M, color: Orange size: M, color: White size: M, color: White size: S, color: Orange size: S, color: White size: Xl, color: Orange size: Xl, color: White size: Xl, color: White