我是Perl的新手并且遇到了一个(很简单的)数组排序问题.
我继承了一些Perl代码,它将文本文件中的行读入三个1-D数组(x,y,z).我希望能够使用其中一个维度作为关键字对这些数组进行排序,并重新排序其他两个维度以匹配.
例如,如果我的输入是:
> @x =(1,3,2)
> @y =(11,13,12)
> @z =(21,23,22)
我按x排序,我希望结果如下:
> @x =(1,2,3)
> @y =(11,12,13)
> @z =(21,22,23)
如果能让生活更轻松,我可以将三个1-D阵列合并为2-D阵列.
解决方法
use strict; use warnings; use Data::Dumper; use List::Util qw(reduce); my @x = (1,2); my @y = (11,12); my @z = (21,22); my @combined = map { [ $x[$_],$y[$_],$z[$_] ] } 0 .. $#x; my @sorted = sort { $a->[0] <=> $b->[0] } @combined; my $split_ref = reduce { push @{$a->[$_]},$b->[$_] for 0 .. $#$a; $a;} [[],[],[]],@sorted; print Dumper \@combined; print Dumper \@sorted; print Dumper $split_ref;
这基本上会给你:
[ [ 1,3 ],[ 11,13 ],[ 21,23 ] ];