Connecting Tech Pros Worldwide Help | Site Map

Need Hash Help

  #1  
Old July 16th, 2007, 09:55 PM
raymond@new.orleans
Guest
 
Posts: n/a
Hi, I'm going out of my mind trying to figure this problem out. To save it,
I figured I'd ask for some help :)

I'm trying to create a hash with name/answer pairs.

I retrieve a person's userid ($name) and their response ($answer) to a
multiple choice question in a poll.

I'm trying to store these into a simple hash:

$responses{ $name } = $answer;

I haven't used perl in quite some time and I THOUGHT this was the proper way
to store these hash pairs but it's not working.

Once I complete getting all the different people's names and answers in one
question, I sort them by answer then print out a single answer with all the
names who chose that answer.

I'd appreciate any help anyone can give me.

Thanks in advance!
  #2  
Old July 16th, 2007, 10:35 PM
Azazel
Guest
 
Posts: n/a

re: Need Hash Help


On 2007-07-16, raymond@new.orleans <raymond@new.orleanswrote:
Quote:
Hi, I'm going out of my mind trying to figure this problem out. To save it,
I figured I'd ask for some help :)
>
I'm trying to create a hash with name/answer pairs.
>
I retrieve a person's userid ($name) and their response ($answer) to a
multiple choice question in a poll.
>
I'm trying to store these into a simple hash:
>
$responses{ $name } = $answer;
>
I haven't used perl in quite some time and I THOUGHT this was the proper way
to store these hash pairs but it's not working.
>
Once I complete getting all the different people's names and answers in one
question, I sort them by answer then print out a single answer with all the
names who chose that answer.
>
I'd appreciate any help anyone can give me.
In that case you want the keys and values the other way round:

if (!$responses{$answer})
{
$responses{$answer} = [ $name ];
}
else
{
push @{$responses{$answer}}, $name;
}

foreach $answer (sort keys %responses)
{
print "$answer: ", join (", ", @{$responses{$answer}}), "\n";
}
  #3  
Old July 17th, 2007, 12:15 AM
raymond@new.orleans
Guest
 
Posts: n/a

re: Need Hash Help



On 16-Jul-2007, Azazel <azazel@azazel.netwrote:
Quote:
In that case you want the keys and values the other way round:
>
if (!$responses{$answer})
{
$responses{$answer} = [ $name ];
}
else
{
push @{$responses{$answer}}, $name;
}
>
foreach $answer (sort keys %responses)
{
print "$answer: ", join (", ", @{$responses{$answer}}), "\n";
}

Hey, thanks SO MUCH! That worked like a charm!

Now if you don't mind, I'm trying to figure out why this worked and mine
didn't.

It seems the statement: $responses{$answer] = [ $name ] is a hash of arrays
(very clever!) but why didn't my original attempt work:

$responses{$name} = $answer;

After assigning the values I tried to print them out. $name printed out ok
but the corresponding $answer was a null value.

Thank you!
  #4  
Old July 17th, 2007, 10:35 AM
Joe Smith
Guest
 
Posts: n/a

re: Need Hash Help


raymond@new.orleans wrote:
Quote:
I'm trying to create a hash with name/answer pairs.
>
I retrieve a person's userid ($name) and their response ($answer) to a
multiple choice question in a poll.
>
I'm trying to store these into a simple hash:
>
$responses{ $name } = $answer;
If you have the name already and are looking to store or retrieve their
one-and-only-answer, that is the way to do it. If you are having problems,
it is somewhere else in your program not in that statement.
Quote:
Once I complete getting all the different people's names and answers in one
question, I sort them by answer
perldoc -q 'by value'
Quote:
then print out a single answer with all the names who chose that answer.
You say "single answer" which implies a hash keyed by answer, not by name.
You say "all the names" which implies the hash value will be an array of names.

So, by your own words, you are looking for a hash of arrays where the hash
is indexed by $answer and the value is is an anonymous array containing
multiple $name entries.

Any further questions should be accompanied by a short but functional program
showing what you've got so far, and should be posted to the comp.lang.perl.misc
newsgroup (not comp.lang.perl since this newsgroup is defunct).

-Joe
  #5  
Old July 17th, 2007, 06:55 PM
Randal L. Schwartz
Guest
 
Posts: n/a

re: Need Hash Help


>>>>"Azazel" == Azazel <azazel@azazel.netwrites:

AzazelIn that case you want the keys and values the other way round:

Azazel if (!$responses{$answer})
Azazel {
Azazel $responses{$answer} = [ $name ];
Azazel }
Azazel else
Azazel {
Azazel push @{$responses{$answer}}, $name;
Azazel }

Or just:

push @{$responses{$answer}}, $name;

since autovivification will Do The Right Thing when $responses{$answer} is
undef.

--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com<URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

--
Posted via a free Usenet account from http://www.teranews.com

  #6  
Old July 17th, 2007, 06:55 PM
Randal L. Schwartz
Guest
 
Posts: n/a

re: Need Hash Help


>>>>"raymond" == raymond <raymond@new.orleanswrites:

raymondNow if you don't mind, I'm trying to figure out why this worked and mine
raymonddidn't.

STOP POSTING HERE. THIS IS A DEAD GROUP.

The fact that *your* news server (and a few thousand others) still carry
it is not justification for posting in a *dead* group.

The group you want is comp.lang.perl.misc.

--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com<URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

--
Posted via a free Usenet account from http://www.teranews.com

  #7  
Old July 18th, 2007, 04:35 AM
raymond@new.orleans
Guest
 
Posts: n/a

re: Need Hash Help



On 17-Jul-2007, Joe Smith <joe@inwap.comwrote:
Quote:
and should be posted to the
comp.lang.perl.misc
newsgroup (not comp.lang.perl since this newsgroup is defunct)
Ok thanks, I didn't know that. I do now.
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Need help on rogue wave template classes.. prakash.mirji@gmail.com answers 5 May 28th, 2007 11:15 PM
Formatting the output of hash values Wayne Deleersnyder answers 1 March 12th, 2007 06:35 AM
I need help figuring out how to fix this code. Nathan Pinno answers 8 July 19th, 2005 03:29 AM
need help to refactor objects lawrence answers 0 July 17th, 2005 12:39 AM