> Have you considered using a hash of arrays instead?
> 
> push @{$files{'.pl'}}, ':folder_one:byte.pl';
> push @{$files{'.pl'}}, ':folder_one:byte.pl';
> push @{$files{'.gif'}}, ':folder_one:some.gif';
> 
> etc.
> 
> Ronald

actually yes, though with this syntax:

$hash_of_file_extensions{".pl"}  = [":folder_one:byte.pl", 1];

but that didnt help much, because i still could not maintain the insert
order. it seems the only "nonmodular" way is by a push.
i have given up with the tie::Hash module as i could not get it to
maintain the order of the inner hash, the outher hash was no problem.

so my current code (which is unfortuantely slow as it is a pretty large
filesystem) looks something like this (i dont have it right here):

$hash_of_file_extensions{$extension} = $level; # this is just to grab
each extension only once, i dont actually use the level variable
push(@somearray, $extension, $file);


# then some time consuming stuff like this:
 
foreach $key (sort(keys % hash_of_file_extensions)) {
        print "$hash_of_file_extensions\n";
        for ($i = 0; $i <= $#somearray; i++) {
                if ($somearray[$i] eq $key) {
                    print $somearray[$i+1] \n";
                }
        }
}       


any suggestions for improvemnt much appriciated.

thanks allan






Ronald J Kimball wrote:
> 
> On Sun, Oct 28, 2001 at 01:24:35PM +0100, allan wrote:
> > hi
> > while traversing a filesystem i want to output a list of all files
> > grouped by file extensions.
> > this is no problem in itself but in the output i want the file names to
> > appear in their correct sorted or nested order (which is in the order
> > they entered the hash).
> > considering the test script below i have a for loop that can do the
> > order for me (but no filenames) and a while loop that can produce the
> > filenames (but unordered).
> 
> > $hash_of_file_extensions{".pl"}{1}   = ":folder_one:byte.pl";
> > $hash_of_file_extensions{".pl"}{2}   = ":folder_one:compare.pl";
> > $hash_of_file_extensions{".gif"}{3}  = ":folder_one:some.gif";
> > $hash_of_file_extensions{".gif"}{4}  = ":folder_one:folder_two:pic.gif";
> > $hash_of_file_extensions{".pl"}{5}   = ":folder_one:folder_two:cool.pl";
> > $hash_of_file_extensions{".pl"}{6}   = ":folder_one:folder_two:nested.pl";
> > $hash_of_file_extensions{".pl"}{7}   = 
>":folder_one:folder_two:folder_three:hash.pl";
> > $hash_of_file_extensions{".gif"}{8}  = 
>":folder_one:folder_two:folder_three:b_.gif";
> > $hash_of_file_extensions{".pl"}{9}   = 
>":folder_one:folder_two:folder_three:last.pl";
> > $hash_of_file_extensions{".gif"}{10} = 
>":folder_one:folder_two:folder_three:last.gif";
> >

Reply via email to