MathGroup Archive 2011

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

Search the Archive

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~
>
>


  • Prev by Date: How show axes labels with AxesOrigin->{0,0,0} in 3D?
  • Next by Date: Re: plotting contours on a sphere
  • Previous by thread: Question about function construction
  • Next by thread: Re: Question about function construction