Re: Question about function construction
- To: mathgroup at smc.vnet.net
- Subject: [mg119488] Re: Question about function construction
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Mon, 6 Jun 2011 06:24:09 -0400 (EDT)
What you effectively coded is that for every unknown key, the full hash table is re-created. You Map the assignment (Set) on a list of keys, and get a list of assigned values. The second time, you already have a specific definition for that key, so that one fires, and you get a single value. Here is what you should have done, in your approach: ConstructHashtable[] := Module[{pairs = {{"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"}, {"key4", "value4"}}}, Clear[Hashtable]; (Hashtable[#[[1]]] = #[[2]]) & /@ pairs;] although it would seem more natural to me to make the original keys and values arguments for your constructor, as well as the hash table name. Regards, Leonid On Sun, Jun 5, 2011 at 4:04 AM, ZiYuan Lin <ziyuang at gmail.com> wrote: > Hi, there. > I want to construct a function serving as a hash table. This is how I make > it: > > ConstructHashtable[] := > Module[{pairs = {{"key1", "value1"}, {"key2", "value2"}, {"key3", > "value3"}, {"key4", "value4"}}}, Clear[Hashtable]; > Hashtable[key_?StringQ] := (Hashtable[#[[1]]] = #[[2]]) & /@ pairs;] > > And then I run the code above together with a test: > > ConstructHashtable[]; Hashtable["key1"] > > Yet it returns all values: > > {"value1", "value2", "value3", "value4"} > > But if I run it again: > > Hashtable["key1"] > > It will get normal: > > "value1" > > What is the reason for this? Thank you~ > >