Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > Getting Values from Hashes

Reply
Thread Tools

Getting Values from Hashes

 
 
George Kinley
Guest
Posts: n/a
 
      06-18-2004
Hi
I have an hash as $Hash{Name}{NickName}
Where Name is String
NickName Array
I can get All NickName in an array as

@AllNN=values @{$$Hash{Name}}

my query is Why I cant get the same result with
@AllNN=values %{$Hash{Name}}
or
@AllNN=values $Hash{Name}




--
 
Reply With Quote
 
 
 
 
Paul Lalli
Guest
Posts: n/a
 
      06-18-2004
On Fri, 18 Jun 2004, George Kinley wrote:

> Hi
> I have an hash as $Hash{Name}{NickName}
> Where Name is String
> NickName Array
> I can get All NickName in an array as
>
> @AllNN=values @{$$Hash{Name}}
>
> my query is Why I cant get the same result with
> @AllNN=values %{$Hash{Name}}
> or
> @AllNN=values $Hash{Name}
>


Analize your datastructure. It looks something like this, yes?

%Hash = (
'Robert' => ['Bob', 'Rob'],
'William' => ['Will', 'Billy'],
);


Now analize the code you were trying to use.

values %{$Hash{'Robert'}}

$Hash{'Robert'} is an array reference. It references an array containing
Bob and Rob. You cannot derefernce this as a hash because it is not a
hash reference.

values $Hash{'Robert'}

$Hash{'Robert'} is an array reference. You cannot use values on an array
reference. The argument to values() must be a hash.

I don't quite understand your claim that values @{$$Hash{Name}} works like
you want it. Even if I have misunderstood your datastructure, you cannot
pass an array to values(). This is a syntax error.

Using the datastructure I typed above, you would get all the nicknames for
a particular name like this:
@nicks = @{$Hash{'Robert'}};

If you want *all* nicknames, you could use something like this:

@all_nicks = map { @{$Hash{$_}} } keys %Hash;



If you need further assistance (if, for example, I have not understood
your description of your datastructure), please post a short but complete
program demonstrating your issue.

Thank you,
Paul Lalli

 
Reply With Quote
 
 
 
 
George Kinley
Guest
Posts: n/a
 
      06-18-2004
Paul Lalli wrote:

> On Fri, 18 Jun 2004, George Kinley wrote:
>
> > Hi
> > I have an hash as $Hash{Name}{NickName}
> > Where Name is String
> > NickName Array
> > I can get All NickName in an array as
> >
> > @AllNN=values @{$$Hash{Name}}
> >
> > my query is Why I cant get the same result with
> > @AllNN=values %{$Hash{Name}}
> > or
> > @AllNN=values $Hash{Name}
> >

>
> Analize your datastructure. It looks something like this, yes?
>
> %Hash = (
> 'Robert' => ['Bob', 'Rob'],
> 'William' => ['Will', 'Billy'],
> );
>
>
> Now analize the code you were trying to use.
>
> values %{$Hash{'Robert'}}
>
> $Hash{'Robert'} is an array reference. It references an array
> containing Bob and Rob. You cannot derefernce this as a hash because
> it is not a hash reference.
>
> values $Hash{'Robert'}
>
> $Hash{'Robert'} is an array reference. You cannot use values on an
> array reference. The argument to values() must be a hash.
>
> I don't quite understand your claim that values @{$$Hash{Name}} works
> like you want it. Even if I have misunderstood your datastructure,
> you cannot pass an array to values(). This is a syntax error.
>
> Using the datastructure I typed above, you would get all the
> nicknames for a particular name like this:
> @nicks = @{$Hash{'Robert'}};
>
> If you want all nicknames, you could use something like this:
>
> @all_nicks = map { @{$Hash{$_}} } keys %Hash;
>
>
>
> If you need further assistance (if, for example, I have not understood
> your description of your datastructure), please post a short but
> complete program demonstrating your issue.
>
> Thank you,
> Paul Lalli



I believe its my mistake that I did not mentioned that I was getting
this HASH as reference from another procedure, so that is the reason I
need to dereference it by double "$"
--
 
Reply With Quote
 
Paul Lalli
Guest
Posts: n/a
 
      06-18-2004
On Fri, 18 Jun 2004, George Kinley wrote:

> Paul Lalli wrote:
>
> > On Fri, 18 Jun 2004, George Kinley wrote:
> >
> > > Hi
> > > I have an hash as $Hash{Name}{NickName}
> > > Where Name is String
> > > NickName Array
> > > I can get All NickName in an array as
> > >
> > > @AllNN=values @{$$Hash{Name}}
> > >
> > > my query is Why I cant get the same result with
> > > @AllNN=values %{$Hash{Name}}
> > > or
> > > @AllNN=values $Hash{Name}
> > >

> >
> > I don't quite understand your claim that values @{$$Hash{Name}} works
> > like you want it. Even if I have misunderstood your datastructure,
> > you cannot pass an array to values(). This is a syntax error.
> >

>
> I believe its my mistake that I did not mentioned that I was getting
> this HASH as reference from another procedure, so that is the reason I
> need to dereference it by double "$"



This is not at all the issue. You're claiming that you're passing an
array (something that starts with '@') to the values() function. This
doesn't work. It's a syntax error. It doesn't matter how many levels of
dereferencing are involved.

Post a short but complete program that illustrates your problem if you're
still having one.

Paul Lalli
 
Reply With Quote
 
George Kinley
Guest
Posts: n/a
 
      06-21-2004
Paul Lalli wrote:

> On Fri, 18 Jun 2004, George Kinley wrote:
>
> > Paul Lalli wrote:
> >
> > > On Fri, 18 Jun 2004, George Kinley wrote:
> > >
> > > > Hi
> > > > I have an hash as $Hash{Name}{NickName}
> > > > Where Name is String
> > > > NickName Array
> > > > I can get All NickName in an array as
> > > >
> > > > @AllNN=values @{$$Hash{Name}}
> > > >
> > > > my query is Why I cant get the same result with
> > > > @AllNN=values %{$Hash{Name}}
> > > > or
> > > > @AllNN=values $Hash{Name}
> > > >
> > >
> > > I don't quite understand your claim that values @{$$Hash{Name}}
> > > works like you want it. Even if I have misunderstood your
> > > datastructure, you cannot pass an array to values(). This is a
> > > syntax error.
> > >

> >
> > I believe its my mistake that I did not mentioned that I was getting
> > this HASH as reference from another procedure, so that is the
> > reason I need to dereference it by double "$"

>
>
> This is not at all the issue. You're claiming that you're passing an
> array (something that starts with '@') to the values() function. This
> doesn't work. It's a syntax error. It doesn't matter how many
> levels of dereferencing are involved.
>
> Post a short but complete program that illustrates your problem if
> you're still having one.
>
> Paul Lalli


SOrry for asking the wrong question I was also not using the "values"
Sorry again


But my questions was

my query is Why I cant get the same result with
> > > > @AllNN=values %{$Hash{Name}}
> > > > or
> > > > @AllNN=values $Hash{Name}
> > > >


that was explained by you thanks
--
-Gk
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
On Hashes - How the hashes printing works? Neela megha shyam Chivukula Ruby 4 05-28-2009 10:56 AM
How to make an array of hashes to a single array with all thevalues of these hashes ? kazaam Ruby 12 09-13-2007 01:30 PM
using hashes as keys in hashes Steven Arnold Ruby 3 11-23-2005 03:25 PM
Hash of hashes, of hashes, of arrays of hashes Tim O'Donovan Perl Misc 5 10-28-2005 05:59 AM
Hashes of Hashes via subs Ben Holness Perl 8 10-08-2003 06:57 AM



Advertisments