0

CSVファイル用の約200のインデックスを含むperlの配列があります。以下の行のように好きです:

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

4 に答える 4

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;

編集:コロンをコンマに変更

于 2013-01-18T22:22:40.207 に答える
4

コード化することを意図していると思われる古典的なSchwartzian Transformは、次のようになります。@sdir

use strict;
use warnings;

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

print for @sorted;
于 2013-01-19T01:49:52.610 に答える
1

救助のための通常の並べ替え

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

-t は、カンマで分離することを意味します

-n または -g 数値ソート

-k1,2 カラム 1 から 2 を使用 -t を参照

男のソート

于 2013-01-18T22:14:51.120 に答える
-1

それぞれから最初のアイテムを取得するソート関数を作成し、アイテムの比較を行います。次の形式になります。

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

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

次に、ソートの呼び出しの一部としてサブルーチンを呼び出します。

@sortedArray = sort sortStuff @array;

番号でソートされ、行の残りの項目は無視されます。

于 2013-01-18T22:20:18.983 に答える