in reply to Array Sort
For small amounts of data and with a simple way of extracting the key string the technique BrowerUK suggests is a good solution. If finding the key is expensive or the amount of data being sorted is large such that the sort processing takes a long time a common technique is the schwartzian transform. Consider:
#!/usr/local/bin/perl use strict; use warnings; my @data = ('AC-BA91-CA', 'AB-BA92-CA', 'AD-BA90-CC', 'AA-BA93-CA', 'AA-BA89- +CB'); my @sorted = map {$_->[0]} sort {$a->[2] cmp $b->[2]} map {[$_, split '-']} @da +ta; print "$_\n" for @sorted;
Prints:
AA-BA89-CB AD-BA90-CC AC-BA91-CA AB-BA92-CA AA-BA93-CA
The key to the process is to transform the data into a form that can be sorted, sort it, then transform it back again. The process really runs from right to left with the right most map generating a temporary transformed list (with the original data as the first element of each list item. The sort is in the middle. Then the left most map pulls the original string out of each item in the sorted list.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Array Sort
by Utilitarian (Vicar) on May 10, 2011 at 07:09 UTC | |
by GrandFather (Saint) on May 10, 2011 at 08:00 UTC | |
|
Re^2: Array Sort
by BrowserUk (Patriarch) on May 10, 2011 at 18:18 UTC | |
by ikegami (Patriarch) on May 10, 2011 at 19:18 UTC | |
by BrowserUk (Patriarch) on May 10, 2011 at 19:53 UTC | |
|
Re^2: Array Sort
by ikegami (Patriarch) on May 10, 2011 at 19:10 UTC |