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