MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: associative arrays

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63885] Re: associative arrays
  • From: albert <awnl at arcor.de>
  • Date: Fri, 20 Jan 2006 04:32:46 -0500 (EST)
  • References: <dqn7t9$l8m$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

ekantian wrote:

> ok, i know from this group that to see keys in a hash (as in per keys
> %hash) in would use

hm. You should be aware that there is a big difference between using
mathematica downvalues and perl-hashes, even though for simple use cases
they look very similar...

> keys[hash_] := Map[#[[1, 1, 1]] &, DownValues[hash]];
> 
> however, what if i have multiple levels of keys, like
> 
> a[levelone][leveltwo]={1,2,3}
> a[levelone][level2]={4,5,6}
> a[levelA][levelB]={7,8,9}
> 
> I need keys[a] to give me {levelone, levelA} and keys[a[levelone]] to
> give me {leveltwo, level2}, etc.

Look at SubValues[a]. From this you can construct something that works as
you want along the lines of the DownValues-Trick. 

Probably it would be a better idea to construct something more hierachical,
depending on what you want to achive, e.g.:

a[levelone]=dummy1
dummy1[leveltwo]={1,2,3}

You could write code that constructs something like that and use Unique to
automatically generate dummy-symbols using something like (of course you
might want to make this work with arbitrary depth and add checks to whether
there are entries already...):

WriteToNestedHash[a,{l1_,l2_},val_]:=With[{dummy=Unique[$dummy]},
        a[l1]=dummy;
        dummy[l2]=val;
]

Anyway, be warned that it might not be a very good idea to try to write
Mathematica code as a literal translation of perl code...

hth

albert


  • Prev by Date: Re: Question regarding replacement
  • Next by Date: Recalculating values in tables?
  • Previous by thread: associative arrays
  • Next by thread: Re: associative arrays