prints:use strict; my @matrix; $matrix[0][0] = 'A1a1'; #sort by this column $matrix[0][1] = 'img1'; $matrix[0][2] = 'x123'; $matrix[0][3] = 'y123'; $matrix[1][0] = 'A1a2'; $matrix[1][1] = 'img2'; $matrix[1][2] = 'x123'; $matrix[1][3] = 'y456'; $matrix[1][0] = 'A1a12'; $matrix[1][1] = 'img3'; $matrix[1][2] = 'x456'; $matrix[1][3] = 'y789'; $matrix[2][0] = 'A10a1'; $matrix[2][1] = 'img4'; $matrix[2][2] = 'x456'; $matrix[2][3] = 'y123'; $matrix[3][0] = 'A12a1'; $matrix[3][1] = 'img5'; $matrix[3][2] = 'x456'; $matrix[3][3] = 'y456'; my @sorted_matrix = sort {$a->[0] <=> $b->[0] || $a->[0] cmp $b->[0] } + @matrix; for my $i ( 0 .. $#sorted_matrix ) { for my $j ( 0 .. $#{ $sorted_matrix[$i] } ) { print "$i $j -> $sorted_matrix[$i][$j]\n"; } print "\n"; }
Instead I would like to have:0 0 -> A10a1 0 1 -> img4 0 2 -> x456 0 3 -> y123 1 0 -> A12a1 1 1 -> img5 1 2 -> x456 1 3 -> y456 2 0 -> A1a1 2 1 -> img1 2 2 -> x123 2 3 -> y123 3 0 -> A1a12 3 1 -> img3 3 2 -> x456 3 3 -> y789
I also tried to adapt something I found on this forum, but I don't fully understand it.A1a1 A1a12 A10a1 A12a1
Thanks for sharing your wisdom!my @sorted_matrix = grep {s/(^|\D)0+(\d)/$1$2/g,1} sort {$a->[0] cmp $ +b->[0]} grep {s/(\d+)/sprintf"%06.6d",$1/ge,1} @matrix;
In reply to natural sort on array of arrays by shamat
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |