>>>>> "SF" == Steve Fink <[EMAIL PROTECTED]> writes:

  SF> I don't think this has been mentioned, although it's really just a
  SF> combination of two existing ones: I often have a table of sets.

  SF>   for my $user (@filenames) {
  SF>     open(my $fh, "<", $user) {
  SF>       while(<$fh>) {
  SF>         $use{$user}{$1} = 1 while /include\s*['"](.*?)['"]/g;
  SF>     }
  SF>   }

  SF> It's a full graph, with fast looking and iteration over outgoing edges.

i consider graphs a variant of deep (and cyclical) data structures. and
i think they are more complex than the other simple hash uses. also
graphs are too hard to explain in one slide for this class. but i will
keep it in mind as another use. all the classic linked list structures
can be easily done with hashes for sure.

  SF> There's sort of another use buried in there, too: hashes can be
  SF> used to map object identifiers to their data (a la inside-out
  SF> objects or something simpler that is just trying to keep the real
  SF> data in a canonical place, perhaps to avoid worrying about cyclic
  SF> references.)

i use a hash to track all objects created by a class. the fun part is
that the key and value were the same thing. but the key gets stringified
which is why you still need the ref/object as the value.

  SF> Hashes can be used for caches or memoization:

  SF>   our $answer;
  SF>   sub func {
  SF>     return $answer ||= ...compute...;
  SF>   }

caching is a good one. that is all that memoize uses.

  SF> Hashes can be used for sparse arrays:

  SF>   $arr{10} = "X";
  SF>   $arr{83719} = "Y";

i mentioned that one.

  SF> Hashes can be used for symbol tables. :-)

true. i didn't mention that. but i always teach to use hashes for data
and not the symbol table (via symrefs). mung the symbol table only when
you need to mung it!

thanx,

uri

-- 
Uri Guttman  ------  [EMAIL PROTECTED]  -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs  ----------------------------  http://jobs.perl.org

Reply via email to