in reply to Re: sorting an array of hashes by the value of the keys
in thread sorting an array of hashes by the value of the keys

Not true. Of course you can sort a hash. The random part is the order in which the keys get inserted, but if you do

sort(keys %hash)
you'll get the keys in alphabetical order. If you do
sort { $a <=> $b } keys %hash;
you'll get the keys in numerical order.

The only thing you can't get from the hash is the order in which things were added

Update: I can't type ... switched can get to can't get in the sentence above, sort of changes the meaning :)

Update: sauoq is correct and I'm completely wrong (not the first time) I wasn't thinking about the fact that sort is simply returning the keys in the order which you ask. The original remains the same. Apologies sweetblood.

Lobster Aliens Are attacking the world!

Replies are listed 'Best First'.
Re: Re: Re: sorting an array of hashes by the value of the keys
by sauoq (Abbot) on Aug 12, 2003 at 17:20 UTC
    Of course you can sort a hash.

    Well, no. You really can't. You can, as your examples show, generate a list of the sorted keys of a hash¹. You can do the same with the values. But the hash itself remains unsorted.

    Contrast that with an array, a structure that you can sort:

    perl -le '@a = qw(b c a); @a = sort @a; print "@a"'
    The equivalent for a hash, something like %h = map { $_, $h{$_} } sort keys %h; does a lot of work for no good reason. (And, %h = sort %h wouldn't even keep the key/value pairs intact.) There is simply no way to sort a hash.

    1. People are usually perfectly happy with this solution. My guess is that the monk to which you were responding was either being pedantic or was reciting something by rote that he recently learned.

    -sauoq
    "My two cents aren't worth a dime.";