SPUG: Sorting hash question
Peter Darley
pdarley at kinesis-cem.com
Tue Apr 30 16:26:57 CDT 2002
Matt,
The variable $Item is actually a reference in a scalar, rather than a hash,
so I need to re-reference it to $$Item{Children} before dereferencing it to
%{$$Item{Children}}, if that makes any sense. If I don't need to do this, I
would be ecstatic, but it has been the only way I could figure out to do it.
Any suggestions?
Thanks,
Peter Darley
-----Original Message-----
From: Matt Tucker [mailto:tuck at whistlingfish.net]
Sent: Tuesday, April 30, 2002 1:11 PM
To: Peter Darley
Cc: SPUG
Subject: Re: SPUG: Sorting hash question
-- Peter Darley <pdarley at kinesis-cem.com> spake thusly:
> I currently have a hash that looks like
> $Item{Children}{[child #]}{other stuff}
>
> A couple of examples would be:
> $Item{Children}{1}{name}
> $Item{Children}{1}{content}
> $Item{Children}{2}{name}
> $Item{Children}{2}{content}
>
> I'm getting at the Children of Item using:
> for $SubItem (values %{$$Item{Children}})
Why are you dereferencing it like this? %{$Item{Children}} is
sufficient. Additionally, if you're using numbers, why not just use an
array? Something like:
$Item{Children}[1]{name}
$Item{Children}[1]{content}
$Item{Children}[2]{name}
$Item{Children}[2]{content}
Unless, of course, the numbering is more sparse than the example you
give, in which case hashes probably make sense.
> which gives me an unsorted list of items. I would like to have it
> sorted in the order of the keys of the %{$Item{Children}}. I found
> lots of info on how to step through the keys of a hash sorted by
> value, but not anything on stepping through the values of a has
> sorted by key. Is this easily doable, or should I do something like:
>
> for $SubItem (sort {$a<=>$b} keys %{$$Item{Children}})
> {
> $SubItem = $$Item{Children}{$SubItem};
> ...
> }
This is a perfectly reasonable way to do it, although I would suggest
not repurposing the $SubItem variable. A better snippet would be:
for my $subkey (sort {$a<=>$b} keys %{$Item{Children}})
{
my $subItem = $Item{Children}{$subkey};
...
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org
More information about the spug-list
mailing list