### Re^4: Architectural question...

by devnul (Monk)
 on Jul 05, 2005 at 17:50 UTC ( #472540=note: print w/replies, xml ) Need Help??

in reply to Re^3: Architectural question...

Let me try to elaborate.. This code:
```foreach my \$id (0..\$x)
{
my \$cat = \$ids{\$id};
if(!\$ret{\$ids{\$id}}{'count'})
{
\$ret{\$ids{\$id}}{'count'} = 0;
\$ret{\$ids{\$id}}{'cat_count'} = 'cat_count';
\$ret{\$ids{\$id}}{'subcat_count'} = 'subcat_count';
}
\$ret{\$ids{\$id}}{'count'}++;
}
.. builds a hash where the key is something like "a.b.c.d". .. The problem is the total for a.b.c needs to be a sum of all the categories beneath it a.b.c.* and thus the top level category is the sum of "a.*".

This "summation" is handled by the next snippet:
```while(my(\$key,\$val) = each(%ret))
{
my @parts = split(/\./, \$key);
my \$id = '';
{
if(\$id eq \$key)
{
next;
}
if(!\$ret{\$id}{'count'})
{
\$ret{\$id}{'count'} = 0;
\$ret{\$id}{'cat_count'} = 'cat_count';
\$ret{\$id}{'subcat_count'} = 'subcat_count';
}
\$ret{\$id}{'count'} += \$ret{\$key}{'count'};
\$id .= '.';
}

}

In the example where \$key = 'a.b.c.d' each loop of the foreach loop would look something like:
```Loop #1: a
Loop #2: a.b
Loop #3: a.b.c
Loop #4: a.b.c.d. (skipped)

I hope this clarifies!

- dEvNuL

Create A New User
Node Status?
node history
Node Type: note [id://472540]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2017-08-20 12:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Who is your favorite scientist and why?

Results (315 votes). Check out past polls.

Notices?