Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 从表中排序数组_Perl_Sorting - Fatal编程技术网

Perl 从表中排序数组

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

下面是我创建的用于从表中解析的代码。正在解析的列是第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 $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