Sorting numbers in an array

Scott Elcomb Scott.Elcomb-iRg7kjdsKiH3fQ9qLvQP4Q at public.gmane.org
Wed Aug 18 06:42:42 UTC 2004


On Wed, 2004-08-18 at 02:30, Kevin C. Krinke wrote:
> On Tue, 2004-08-17 at 23:44, Madison Kelly wrote:
> > Scott Elcomb wrote:
> > > On Tue, 2004-08-17 at 22:51, Madison Kelly wrote:
> > > 
> > >>Hi all,
> > >>
> 
> <snip>
> 
> > 
> > Hmm, I didn't think that far ahead (a side effect of coding so late I 
> > guess... :p ). For a single-dimension array it worked great, thanks! 
> > (and to Anton and Andy!).
> > 
> > What I need to do now though is somehow sort along with it two other 
> > arrays... What I had been trying to do, and what I am realizing now 
> > probably not work, is to somehow tie three arrays together and sort them 
> > together. Maybe it will be clearer if I explain what I am doing:
> > 
> > I look at a directory and count how much space is used by the files 
> > within it and how many files they are (excluding sub-directories). So 
> > for example; here is the unsorted output I am working with:
> > 
> > -=-=- code output -=-=-
> >   | |- Recording the new directory in the database as being on the 
> > destination partition:
> >   | |- Processing: [/], file num: [4], space within: [14.20 MB - 
> > 14892387 bytes]
> 
> <snip>
> 
> >   | |- Processing: [/Maddy's Images/Wallpapers/working/.xvpics], file 
> > num: [4], space within: [16.7 KB - 17086 bytes]
> > 
> > 
> > Below here is the directory content sizes now sorted thanks to the help 
> > of you guys:
> > 
> > 
> >   | |- Sorting the directories by the size of their files (excluding 
> > sub-directories):
> >   | |- #0: Size: [1.036 GB - 1112068984 bytes]
> 
> <snip>
> 
> >   | |- #39: Size: [0 Bytes - 0 bytes]
> >   | \- Finished listing where files from this partition will be backed 
> > up to!
> >   -=-=- end code output -=-=-
> > 
> > As I print out each unsorted directory, file count and file size I fead 
> > each variable into an array. I am now thinking of tieing the values 
> > together into a single string, sorting them and splitting them back out 
> > using a ':' as a seperator. Will the sizes still sort numberically 
> > though? It also seems like a really cumbersome way of doing it, too...
> 
> Off the top of my head, late at night and feeling creative:
> 
> /usr/bin/perl -e '
> #: First we need to process the directories and build up our data
> #: structure. In this case we are going to have each row of output
> #: represented as follows:
> #:
> #:  $data{$path} = { files => $num_files, space => $bytes_of_space }
> #:
> #: Of course you can replace/remove/add as many key=>val pairs to
> #: each $path hash ref to suite your needs.
> 
> #: Fudge some data for example purposes
> %data = ( "/images/many"  => { files => 13, space => 32437947 },
>           "/images/style" => { files => 2, space => 1024 },
>           "/images/these" => { files => 0, space => 0 },
>           "/images/those" => { files => 1, space => 0 },
>           "/images/Post"  => { files => 1, space => 37182 } );
> 
> #: First we sort "normally"
> @sorted_by_path =
>   sort( keys( %data ) );
> print "\nSorted by path name (ascending alphanumeric):\n";
> Print_Output( @sorted_by_path );
> 
> #: Then we sort on the files key value (note $b and $a)
> @sorted_by_files =
>   sort { $data{$b}->{files} <=> $data{$a}->{files} } keys( %data );
> print "\nSorted by file count (descending):\n";
> Print_Output( @sorted_by_files );
> 
> #: And now we sort on the space key value
> @sorted_by_space =
>   sort { $data{$b}->{space} <=> $data{$a}->{space} } keys( %data );
> print "\nSorted by space within (descending):\n";
> Print_Output( @sorted_by_space );
> 
> #: our simple sub to print some human readable output
> sub Print_Output {
>   @sorted = @_;
>   $c = 0;
>   foreach $path ( @sorted ) {
>     #: we need to be careful here because some rows of data have
>     #: no files and/or size.
>     print "\t[" . $c ."] " . $path .
>           "\t: " . ($data{$path}->{files}||"0") .
>           "\t: " . ($data{$path}->{space}||"0") . "\n";
>     $c++;
>   }
> }
> '
> 
> For more Perl help try:
> http://to.pm.org/                   (Toronto Perl Mongers)
> http://perlmonks.org/               (Excellent forums)
> http://perl.com/pub/q/documentation (Where I began to learn Perl)
> http://search.cpan.org/             (Where I now learn the most)
> 
> - Kevin
-- 
https://sourceforge.net/projects/avalonweb/

PGP Public Key:
1024D/98125E76 2004-03-21 Scott Elcomb (dL33T) <Scott.Elcomb-iRg7kjdsKiH3fQ9qLvQP4Q at public.gmane.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://gtalug.org/pipermail/legacy/attachments/20040818/94d9d974/attachment.sig>


More information about the Legacy mailing list