並び替えた順に番号を付けるには?

[上に] [前に] [次に]
hiboo [E-Mail] [HomePage] 2000/03/28(火) 11:56:52
以前同様の質問をさせて頂いたのですが、
私の質問の仕方がまずかったせいか、
適当な回答を頂けなかったので、
改めて内容を整理し質問させて頂きます。

質問内容
任意のデータファイルからprint map(Schwartzian Transformというらしい)
のスクリプトを使い並び替えて表示させ、かつ順に番号を付けたいのです。
A の並び替えまではできるだが、Bのように番号が上手くつけられません。
尚、最終的には上記HPのように応用したいと考えておりますので、合わせて御参照下さい。
御教示の程宜しくお願い致します。

@もともとのデータファイル内の情報
A,赤,3
B,黒,5
C,白,1
D,青,6

A並び替え結果(3項を昇順)
C,白,1
B,黒,5
A,赤,3
D,青,6

B順に番号を付ける
1,C,白,1
2,B,黒,5
3,A,赤,3
4,D,青,6


当該部のスクリプトだけ抜き出してみました。

@r=<IN>;
close(IN);

print map {"$_->[0]<BR>"}
sort {$a->[3] <=> $b->[3]}
map {[$_,split(/,/)]} @r;

exit;

a 2000/03/28(火) 12:47:47
まちがっていませんか。

A並び替え結果(3項を昇順)
C,白,1
B,黒,5
A,赤,3
D,青,6

C,白,1
A,赤,3
B,黒,5
D,青,6

???

hiboo 2000/03/28(火) 15:00:22
御指摘の通り間違いです。
失礼しました。

にゃあ 2000/03/31(金) 00:18:16
はーい、こういう時は、ロジックを見なおしてみるといいと思います。

ファイルからデータを入力する→配列に入っている
のならば、その配列に今のデータを追加してやる。
それをソートする。
for文を使って、その配列の中で、入力されたデータと
同じ物を探す。見つかればそれが『何番目として入力されたか』
がわかりますね。

そしてfor文を使ってその配列を1行ずつ出力してやれば……

というふうにすればうまく行くと思います。

PS。EOFは『End of File』なので別の文字列にしましょう。

[上に] [前に] [次に]