Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^2: Data Structures

by BrowserUk (Pope)
on May 02, 2008 at 19:20 UTC ( #684237=note: print w/replies, xml ) Need Help??


in reply to Re: Data Structures
in thread Data Structures

I'll ask again. Where are you going to store your 1000 objects? And how are you going to access the individual instances you need?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^3: Data Structures
by CountZero (Bishop) on May 02, 2008 at 20:39 UTC
    Where are you going to store your 1000 objects?
    In an object?

    And how are you going to access the individual instances you need?
    Isn't that what accessors are made for?

    Of course in Perl, objects are just eye-candy around a data-structure (hashes, arrays, or any combination) but if I follow your reasoning, I should program in Assembler as in the end it all is machine-code.

    CountZero

    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

      Care to share some code to demonstrate? Home brew hash or Moose-based doesn't matter.

      Say, 1000 lines and with an average of say 10 stations per line.

      This will generate some test data sufficient for the exercise:

      #! perl -slw use strict; =comment lineName stn. east...north...elev. 000301038 1260 52205121N109153806W 618485158009020 6626 000301038 1261 52205121N109153674W 618510158009027 6623 =cut for my $line ( 1 .. 1000 ) { for my $stn ( 1 .. 10 ) { printf "%08d %8d %08dN%08dW %015s %4d\n", $line, $stn, int( 1e6 * rand( 90 ) ), int( 1e6 * rand( 90 ) ), int( 1e13 * rand( 90 ) ), int( rand 9999 ); } }

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        OK

        I use Moose

        First I made the class holding the whole structure. I called it Seismic.

        And this is the program:

        Everything is stored in one $grid object which consists of $line objects which hold the $station objects.

        Direct access to a station and its attributes is easy:

        $grid->get_line(257)->get_station('257_5')->Elevation;
        Of course, behind the scenes, it is all hashes and arrays and hashes of hashes and ... . And of course it is much slower than programming these data structures directly, but then you don't get these nice accessors, mutators, type-checking, default values, ...

        PS: I did not implement all the fields in all the objects, just enough --I hope-- to show it works.

        CountZero

        A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://684237]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2021-04-22 03:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?