perl中的二维数组排序解决方法
perl中的二维数组排序
#!/usr/bin/perl
use Encode;
@ax=( [60,90,80,75,65], #语文科目成绩
[wang, LI,zhang,ki,huang] , #学生姓名
[75,95,65,85,80] , #英文成绩
[75,95,65,100,99], #数学成绩 ,假定所有的姓名和成绩都不相同
);
#sort{}ax; #我想按照数学成绩排顺序
for $i (0..$#ax){
for $x (0..$#{$ax[$i]}) {
print "$ax[$i][$x]\t";
}
print "\n"
};
#我想按照数学成绩排序,请高手指点#
------解决方案--------------------
------解决方案--------------------
#!/usr/bin/perl
use Encode;
@ax=( [60,90,80,75,65], #语文科目成绩
[wang, LI,zhang,ki,huang] , #学生姓名
[75,95,65,85,80] , #英文成绩
[75,95,65,100,99], #数学成绩 ,假定所有的姓名和成绩都不相同
);
#sort{}ax; #我想按照数学成绩排顺序
for $i (0..$#ax){
for $x (0..$#{$ax[$i]}) {
print "$ax[$i][$x]\t";
}
print "\n"
};
#我想按照数学成绩排序,请高手指点#
perl 排顺
------解决方案--------------------
@ax=( [60,90,80,75,65],
[wang, LI,zhang,ki,huang],
[75,95,65,85,80],
[75,95,65,100,99],
);
sub sort_by_math {
$sid = @_;
$i = 0;
@bx = map {[$i++, $_]} @{@ax[$sid]};
@cx = sort {$a->[1] <=> $b->[1]} @bx;
@dx = map {$_->[0]} @cx;
for $x (@ax) {
print "$x->[$_]\t" for @dx;
print "\n";
}
};
sort_by_math(3);
------解决方案--------------------
@ax=( [60,90,80,75,65],
[wang, LI,zhang,ki,huang],
[75,95,65,85,80],
[75,95,65,100,99],
);
sub sort_by_math {
$sid = shift;
$i = 0;
@bx = map {[$i++, $_]} @{@ax[$sid]};
@cx = sort {$a->[1] <=> $b->[1]} @bx;