laziness, impatience, and hubris PerlMonks

### Re: Re: How to sort hash tables alpha-numeric

by juo (Curate)
 on Oct 19, 2003 at 02:31 UTC ( #300348=note: print w/replies, xml ) Need Help??

in reply to Re: How to sort hash tables alpha-numeric
in thread How to sort hash tables alpha-numeric

This works perfect although I don't understand yet 100% how the Schwartzian transform works. Their is one small problem that I have with the code is that it should look for all leading characters to be split because now it substr only one but it could be more. (CR30-1 for example) So I tried to modify the code but no success.
```sub sorted {
return map { \$_->[0] }
sort {
\$a->[1] <=> \$b->[1] ||
\$a->[2] <=> \$b->[2]
} map { [ \$_, split("-", s/^[A-Z]+//) ] } @_;
}

foreach my \$key (sorted(keys %keys)) {
print "'\$key' => ", \$keys{\$key}, "\n";
foreach my \$subkey (sorted(keys %{\$keys{\$key}})) {
print "   '\$subkey' => \$keys{\$key}->{\$subkey}\n";
}
}

Replies are listed 'Best First'.
Re: Re: Re: How to sort hash tables alpha-numeric
by Aragorn (Curate) on Oct 19, 2003 at 10:46 UTC
The Schwartzian Transform is explained here by the person after who this sorting technique is named.

A modified version of the sorted routine which also takes the leading letters into account:

```
sub sorted {
return map { \$_->[0] }
sort {
\$a->[1] cmp \$b->[1] ||
\$a->[2] <=> \$b->[2] ||
\$a->[3] <=> \$b->[3]
} map { [ \$_, (/([A-Z]+)(\d+)(?:-(\d+)){1,2}/) ] } @_;
}
The split function is replaced by a regex which returns a list of letters and the numbers.

Arjen

Create A New User
Node Status?
node history
Node Type: note [id://300348]
help
Chatterbox?
 [Corion]: Seems like I chose just the right day to do a half-day recovery yesterday. Today it's snowing again, instead of the sun shining, so that's a good day to be at the office again ;) [Discipulus]: good morning folks! [choroba]: Boasting: brian d foy tweeting my blogpost! [Discipulus]: eh eh choroba print it on a t-shirt for the next yapc.. ;=)

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2018-03-22 09:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When I think of a mole I think of:

Results (273 votes). Check out past polls.

Notices?