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>