or evenmy $array2d = []; my @list = (split /,/,join (",",@array)); $array2d->[$_%3][int($_/3)]=$list[$_] for (0..$#list);
And let us compare with :-my @array2d = (); my $c=0; $array2d[$c%3][int($c++/3)]=$_ for (split /,/, join (",",@array));
#!/usr/bin/perl -w use strict; use Devel::Timer; my $runcount=500; my $t = new Devel::Timer(); my @array = ('nfs,7,rw', 'afp,12,rro', 'cifs,32,ro', 'dns,5,rw', ); $t->mark('V1'); for my $runs (1..$runcount) { my $cols = []; foreach my $row (0..$#array) { my @cols = split /,/, $array[$row]; map {$cols->[$_]->[$row] = $cols[$_]} (0..$#cols); } } $t->mark('V2'); for my $runs (1..$runcount) { my @splitted_up = (); my $cnt = 0; push @{ $splitted_up[($cnt ++) % 3] }, $_ foreach (split (/,/, join (",",@array))); } $t->mark('V3'); for my $runs (1..$runcount) { my $array2d = []; my @list = map {split /,/,$_}(@array); $array2d->[$_%3][int($_/3)]=$list[$_] for (0..$#list); } $t->mark('V4'); for my $runs (1..$runcount) { my @array2d = (); my $c=0; $array2d[$c%3][int($c++/3)]=$_ for (split /,/, join (",",@array)); } $t->mark('V4 end'); $t->report();
And the Winner is :-
The second suggested code posted performed best for my given hardward config, but always try speed tests on the correct hardware as OS's etc can effect performance.Devel::Timer Report -- Total time: 0.1663 secs Interval Time Percent ---------------------------------------------- 01 -> 02 0.0530 31.87% V1 -> V2 03 -> 04 0.0443 26.65% V3 -> V4 04 -> 05 0.0370 22.24% V4 -> V4 end 02 -> 03 0.0319 19.15% V2 -> V3 00 -> 01 0.0002 0.09% INIT -> V1
Hope this helpspush @{ $splitted_up[($cnt ++) % 3] }, $_ foreach (split (/,/, join (",",@array)));
In reply to Re: Arrays manipulation
by UnderMine
in thread Arrays manipulation
by hotshot
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |