Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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

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,我有一个perl数组,其中包含大约200个用于csv文件的索引。它就像下面的几行: 46.9234784633993,佛罗里达州那不勒斯斯普林伍德大道 佛罗里达州莱克兰西八街89.7786182217159号 我想在第一个逗号之前按这个数字对它们进行排序。我试着使用just sort,但有时数字会变成成百上千,它只会对所有1中的数字进行排序。那么数字排序不喜欢它,因为它们不是数字条目 我试过这个 my @sortedDistances = sort{ $a <=> $b }(@co

我有一个perl数组,其中包含大约200个用于csv文件的索引。它就像下面的几行:

46.9234784633993,佛罗里达州那不勒斯斯普林伍德大道
佛罗里达州莱克兰西八街89.7786182217159号
我想在第一个逗号之前按这个数字对它们进行排序。我试着使用just sort,但有时数字会变成成百上千,它只会对所有1中的数字进行排序。那么数字排序不喜欢它,因为它们不是数字条目

我试过这个

my @sortedDistances = sort{ $a <=> $b }(@completedDistances);
and
my @sortedDistances = sort(@completedDistances);
my@sortedDistances=sort{$a$b}(@completeddistance);
和
我的@sortedDistances=排序(@completedDistances);

救援的正常排序

sort -t, -n -k1,1 file.cvs
-t、 在comman表示分开

-n或-g数值排序

-k1,2使用第1列至第2列,见-t


我将编写一个排序函数,从每个项目中获取第一个项目,然后对这些项目进行比较。其形式如下:

sub sortStuff($$)
{
  my ($a) = split(',',$_[0]);
  my ($b) = split(',',$_[1]);

  return ( $a <=> $b ) ;
}

它将按编号排序,并忽略行中的其余项目。

这是一种可能的解决方案,如果可行,请尝试:

open FILE, "<", $ARGV[0] or die $!;
my @sorted =
    map { join ",", @{$_} }
    sort { $a->[0] <=> $b->[0] }
    map { [ split /,/ ] } <FILE>;
close FILE;
say join "\n", @sorted;
openfile,我认为
@sdir
打算编写的经典代码应该是这样的

use strict;
use warnings;

my @sorted =  map $_->[0],
              sort { $a->[1] <=> $b->[1] }
              map [$_, /([^,]+)/], <>;

print for @sorted;
使用严格;
使用警告;
我的@sorted=map$\u->[0],
排序{$a->[1]$b->[1]}
地图[$u10;,/([^,]+)/];
打印@sorted;

然后数字排序不喜欢它,因为它们不是数字条目???向我们展示您尝试过的内容。我们无法从您的描述中看出您做错了什么。编辑您的问题以包含失败的代码。然后,描述到底是什么不起作用。尝试时发生了什么?您得到了错误的结果吗?您是否忽略了没有结果?如果结果不正确,是什么导致它们不正确?你期望的是什么?你得到了任何正确的结果吗?如果是,它们是什么?不要让我们猜测。这实际上是正确的答案。可能值得注意的是,使用类似于
split/,/,$\u2
(带第三个参数)效率更高,因为它限制了执行的正则表达式匹配的数量。(此外,咀嚼然后加入换行符也很有趣;
print@sorted
也应该可以)@sdir:没有,但是pure guy提到了“sort”他自己,并且正确地使用它可以节省您大量时间编写有趣的perl oneliner,-并调试它们。没错。我肯定也会用shell sort来完成。但是perl更有趣(我实际上经常使用“oneliner”)。无意冒犯。顺便说一句。很抱歉,这会起作用,但我现在需要将其保留为perl。我不知道这需要自动执行35000次。如果最后一个未排序的csv行未以
\n
结尾,并且该行不是排序后的最后一行,则两行将一起打印,例如,“46.9234784633993,斯普林伍德大道,那不勒斯,FL89.7786182217159,佛罗里达州莱克兰西八街”,也许
map{chomp;[$\uu,/([^,]+)/]};
然后
print join“\n”,@sorted;
会有所帮助。
use strict;
use warnings;

my @sorted =  map $_->[0],
              sort { $a->[1] <=> $b->[1] }
              map [$_, /([^,]+)/], <>;

print for @sorted;