我在perl中有一个数组,其中包含大约200个用于csv文件的索引。它喜欢以下几行:
46.9234784633993,Springwood Drive,Naples,FL
89.7786182217159,W 8th St,Lakeland,FL
我想在第一个逗号之前按照那个数字对它们进行排序。我尝试使用只是排序,但有时数字会变成数百和数千,它只是对1中的所有数字进行排序。然后数字排序不喜欢它,因为它们不是数字条目
我试过这个
my @sortedDistances = sort{ $a <=> $b }(@completedDistances);
and
my @sortedDistances = sort(@completedDistances);
答案 0 :(得分:5)
这是一个可能的解决方案,尝试它是否有效:
open FILE, "<", $ARGV[0] or die $!;
my @sorted =
map { join ",", @{$_} }
sort { $a->[0] <=> $b->[0] }
map { [ split /,/ ] } <FILE>;
close FILE;
say join "\n", @sorted;
编辑:将冒号更改为逗号
答案 1 :(得分:4)
我认为@sdir
打算编码的经典Schwartzian Transform看起来像这样
use strict;
use warnings;
my @sorted = map $_->[0],
sort { $a->[1] <=> $b->[1] }
map [$_, /([^,]+)/], <>;
print for @sorted;
答案 2 :(得分:1)
答案 3 :(得分:-1)
我会编写一个sort函数来获取每个项目的第一项,然后对项目进行比较。它将是以下形式:
sub sortStuff($$)
{
my ($a) = split(',',$_[0]);
my ($b) = split(',',$_[1]);
return ( $a <=> $b ) ;
}
然后调用子例程作为sort:
调用的一部分@sortedArray = sort sortStuff @array;
它将对数字进行排序并忽略该行中的其余项目。