Re: Re: associative arrays
- To: mathgroup at smc.vnet.net
- Subject: [mg58196] Re: [mg58179] Re: [mg58137] associative arrays
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Wed, 22 Jun 2005 01:55:39 -0400 (EDT)
- References: <d8rnfg$l4b$1@smc.vnet.net> <200506181007.GAA08771@smc.vnet.net> <200506190744.DAA05732@smc.vnet.net> <E89993C2-F308-430B-9064-8248DEF9D0C8@jeol.com> <200506211002.GAA14648@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Ed Peschko wrote:
> On Mon, Jun 20, 2005 at 09:05:21AM -0400, Sseziwa Mukasa wrote:
>
>>On Jun 19, 2005, at 3:44 AM, Ed Peschko wrote:
>>
>>
>>>hey all,
>>>
>>>Is there a simple way to make an associative array in mathematica?
>>>
>>>I noticed that there's a sparse array, but I'd like to be able to
>>>use a non-numeric value as key..
>>
>>Don't use arrays, use pattern matching eg:
>>
>>f[key1]=value1
>>f[key2]=value2
>>.
>
>
> that does some things that I want, but I'm not sure if this is a 'true'
> associative array, like perl's or python's dictionaries..
>
> Can you:
>
> a) list the keys in a given order, and iterate over them?
> b) do true, multi-dimentional hashes, where both the key and
> the value of the hash are either other hashes, or lists?
>
>
> I know you can do ?f to list the values, but I'd like to be able to do
> the 2 items above programatically.
>
> Ed
You can extract keys using DownValues, as below.
In[1]:= f[key1]=value1;
In[2]:= f[key2]=value2;
In[4]:= f[key0]=value0;
In[5]:= DownValues[f]
Out[5]= {HoldPattern[f[key0]] :> value0, HoldPattern[f[key1]] :> value1,
HoldPattern[f[key2]] :> value2}
In[6]:= Map[#[[1,1,1]]&, DownValues[f]]
Out[6]= {key0, key1, key2}
You can now iterate over this list. If it were huge such that presorting
might affect speed of doing DownValues, you can do it via
DownValues[...,Sort->False]. Lists can be used as keys.
In[9]:= f[{1,2,3}] = {a,b,c,f,key1};
In[10]:= DownValues[f,Sort->False]
Out[10]= {HoldPattern[f[key1]] :> value1,
HoldPattern[f[key2]] :> value2,
HoldPattern[f[key0]] :> value0,
HoldPattern[f[{1, 2, 3}]] :> {a, b, c, f, key1}}
Daniel Lichtblau
Wolfram Research
- References:
- Re: Transformation rule problem
- From: "Peltio" <peltio@trilight.zone>
- associative arrays
- From: Ed Peschko <esp5@mdssdev05.comp.pge.com>
- Re: associative arrays
- From: Ed Peschko <esp5@mdssdev05.comp.pge.com>
- Re: Transformation rule problem