in reply to Re^2: How to perform different sorts on multiple sections of items in the same array
in thread How to perform different sorts on multiple sections of items in the same array
Perhaps I misinterpreted the OP's spec. I thought the requirement was to sort all those containing an 'r' followed by those starting with an 'e' and finally the remainder but I can see that your interpretation of leaving each set in their relative positions could be more accurate. Perhaps estreb could clarify?
Your algorithm does not exclude items that contain an 'r' from being considered when processing items that start with an 'e'. Eg. 'error'.
Nor does it exclude items that contain an 'r', or start with an 'e', from being processed when reverse sorting "the ones that are left".
I'm not sure you are correct in those statements. The if ( m{r} ) { ... } elsif ( m{^e} ) { ... } else { ... } section assigns ascending values to $type which is packed as the first term and becomes the primary key for the sort. Thus all those starting with an 'r' are sorted separately from those starting with 'e' which are again separate from the remainder. I think this is demonstrated by the output.
carpet } error } Strings containing an 'r' anywhere prawn } are sorted ascending alpha reptile } emblem } engine } Strings starting with 'e' but not echo } containing an 'r' are sorted ascending eskimo } alpha on the third character copy } soap } Strings neither containing an 'r' nor cabin } starting with 'e' are sorted descending pail } alpha on the last character skunk }
Please let me know if you still think I am having a senior moment and have got this aspect of the algorithm completely wrong.
Update: Corrected wrong variable in explanation, s/$ord/$type/
Cheers,
JohnGG
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: How to perform different sorts on multiple sections of items in the same array
by BrowserUk (Patriarch) on Dec 30, 2014 at 12:40 UTC |