Perl 从表中排序数组
下面是我创建的用于从表中解析的代码。正在解析的列是第4列中小于等于0.5的列。我想对符合参数集的解析结果进行排序 样本数据Perl 从表中排序数组,perl,sorting,Perl,Sorting,下面是我创建的用于从表中解析的代码。正在解析的列是第4列中小于等于0.5的列。我想对符合参数集的解析结果进行排序 样本数据 bob smith 15 0.5 will smith 13 0.25 cool smith 12 1.0 预期产量 will smith 0.25 bob smith 0.5 我需要添加到这个脚本中的是一个基于$data[3]中的值的排序函数,最好是从最低到最高。我正在处理一组更大的数据和名称。我试图使用sort{$a$b},但我认为我没有正确使用它 my $valu
bob smith 15 0.5
will smith 13 0.25
cool smith 12 1.0
预期产量
will smith 0.25
bob smith 0.5
我需要添加到这个脚本中的是一个基于$data[3]中的值的排序函数,最好是从最低到最高。我正在处理一组更大的数据和名称。我试图使用sort{$a$b},但我认为我没有正确使用它
my $value;
open(FILE, $ARGV[0]) or die "Cannot open the file: $!";
while(my $line = <FILE>) {
my @data = split(" ", $line);
$value = "$data[3]";
if ($value <= 0.5) {
print "$data[0]\t$data[1]\t$data[3]\n";
}
}
close FILE;
exit;
我的$value;
打开(文件$ARGV[0])或死亡“无法打开文件:$!”;
while(我的$line=){
my@data=split(“,$line);
$value=“$data[3]”;
如果($value使用警告;
严格使用;
我的@selected;
while(我的$line=){
my@data=split(“,$line);
如果选中($data[3][3]$b->[3];}@;
对于我的$x(@selected){
打印“$x->[0]\t$x->[1]\t$x->[3]\n”;
}
__资料__
鲍勃·史密斯15 0.5
威尔·史密斯130.25
酷史密斯12 1.0
这在一个简单的地图中非常清楚
/grep
use strict;
use warnings;
print for sort {
my ($aa, $bb) = map { (split)[3] } ($a, $b);
$aa <=> $bb;
} grep { (split)[3] <= 0.5 } <DATA>;
__DATA__
bob smith 15 0.5
will smith 13 0.25
cool smith 12 1.0
我对您使用的一个函数有一个问题。当您使用push@selected时,\@data具体做什么?我对perl比较陌生,以前没有见过“\”。它将“引用”推送到数组而不是值。请参阅
use strict;
use warnings;
print for sort {
my ($aa, $bb) = map { (split)[3] } ($a, $b);
$aa <=> $bb;
} grep { (split)[3] <= 0.5 } <DATA>;
__DATA__
bob smith 15 0.5
will smith 13 0.25
cool smith 12 1.0
print $_->[-1] for
sort { $a->[3] <=> $b->[3] }
grep { $_->[3] <= 0.5 }
map { [ split, $_ ] } <DATA>;
will smith 13 0.25
bob smith 15 0.5