在perl中对数组进行排序

时间:2013-01-18 21:59:24

标签: perl sorting

我在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);

4 个答案:

答案 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)

正常排序救援

sort -t, -n -k1,1 file.cvs

-t,表示在comman分开

-n或-g数字排序

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

man sort

答案 3 :(得分:-1)

我会编写一个sort函数来获取每个项目的第一项,然后对项目进行比较。它将是以下形式:

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

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

然后调用子例程作为sort:

调用的一部分
@sortedArray = sort sortStuff @array;

它将对数字进行排序并忽略该行中的其余项目。