[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:478) perlのsort
perlで任意のフィールドをキーにソートしたいとき、いわゆるシュウォーツ変換をするのが常套手段ですが、これだと(というかsortコマンドそのものが)キーが同じ値の場合、元の配列の順序が壊れてしまいます。
単純な思いつきですが、キーになる(ソート用の)別配列に行番号をふってみました。
こんな方法でよいものかどうか。。。(笑)
@data = (
"C あああ",
"A いいい",
"F ううう",
"B えええ",
"A おおお",
"A かかか",
"E ききき",
"A くくく",
"A けけけ",
"D こここ");
$cont = 0;
@data_key = map{(split /\t/)[0] . sprintf( "%05d", $cont++ )} @data;#キーだけを含む配列を作成
@sortdata = @data[sort { $data_key[$a] cmp $data_key[$b] } 0 .. $#data_key ];
print join("\n", @sortdata);