ただの備忘記録

忘れないように記録を残します。忘れるから記録に残してます。そして、その記録が役立つといいかな。

Perlで、データのソート

2008年11月18日 | 日記
http://www.k1s.jp/blog.cgi?n=149&category=201
cgi(perl)でのsort(ソート)記述の仕方

ハッシュを利用した方法は書かれているのですが、複数ある変数を使って、ある変数の数値を使って別の変数をソートしたい場合があります。
以下は、@data2の数値を並び替えて、同じ順序に@data1を並び替えるときの手順です。

#ソートの準備
$i = 0;
foreach (@data1) {
$i++;
@keys = $i++;
}

#@data2の並び替え順を@keysに記録
@keys = sort {$data2[$a] <=> $data2[$b]} @keys;

#@data2を並び替え
@data2 = sort {$a <=> $b} @data2;

#@data1を並び替え
@_ = @data1;
$i = 0;
foreach (@keys) {
$data1[$_] = @_[$i++];
}

#####
@data2は、ダイレクトにソートできますが、@data1は直接ソートできません。
@data1 = sort {$data2[$a] <=> $data2[$b]} @data1;
これでできそうに見えますが、@data1には@data2のデータが入ってしまいます。

最新の画像もっと見る

コメントを投稿