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