[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:479) Re: perlのsort



>perlで任意のフィールドをキーにソートしたいとき、いわゆるシュウォーツ変換をするのが常套手段ですが、これだと(というかsortコマンドそのものが)キーが同じ値の場合、元の配列の順序が壊れてしまいます。

シュウォーツ変換て何?と思って調べてみたらPerlのテクニックのひとつなのね。

>
>単純な思いつきですが、キーになる(ソート用の)別配列に行番号をふってみました。
>こんな方法でよいものかどうか。。。(笑)

調べたら同じような方法があるのね。要するにテンポラリの配列は並べ替えるキーにするだけなんだから、別々に存在していてもいい、と
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/199909/mgp00039.html

てことは

@data_key = map{(split /\t/)[0]} @data;#キーだけを含む配列を作成
@sortdata = @data[sort { $data_key[$a] cmp $data_key[$b] || $a <=> $b } 0 .. $#data_key ];
print join("\n", @sortdata);

これだけで良くないか?