SPUG: Sorting hash question
Peter Darley
pdarley at kinesis-cem.com
Tue Apr 30 15:46:49 CDT 2002
Daniel,
The problem with this is that I'm not smart enough to keep track of weather
any particular element is a hash or an array, so in defense I just use
hashes. It's clear that what you're suggesting is probably a more efficient
way to use the language, but it would make me go crazy.
Thanks,
Peter Darley
-----Original Message-----
From: Pommert, Daniel [mailto:Daniel.Pommert at VerizonWireless.com]
Sent: Tuesday, April 30, 2002 12:26 PM
To: 'Peter Darley'; SPUG
Subject: RE: SPUG: Sorting hash question
It seems that your simplest solution would be to change your {[child #]} to
be an array reference from a hash reference. The only reason why you
wouldn't want to do this (that I can think of) is that your subscripts are
very sparce (i.e. lots of gaps in the numbers). If they are dense (i.e. no
gaps), then you should change your array to:
$Item{Children}[child #]{other stuff}
With your examples becoming:
$Item{Children}[1]{name}
$Item{Children}[1]{content}
$Item{Children}[2]{name}
$Item{Children}[2]{content}
Get the Children of Item using:
for $SubItem (@{$Item{Children}}) {
next unless defined $SubItem; # Handle [0] element
which gives you an ordered list.
Your second loop becomes:
for $SubItem (@{$Item{Children}}) {
next unless defined $SubItem; # Handle [0] element
. . .
}
I hope this helps.
-- Daniel Pommert
Verizon Wireless
425-603-8612
-----Original Message-----
From: Peter Darley [mailto:pdarley at kinesis-cem.com]
Sent: Tuesday, April 30, 2002 11:25 AM
To: SPUG
Subject: SPUG: Sorting hash question
Friends,
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}})
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};
...
}
I would be greatfull for any suggestion! :)
Thanks,
Peter Darley
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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