【お題】甲子園での思い出の残し方

たとえば、

$out[0] = "いぬ";
$out[1] = "もりくぼしょうたろう";
$out[2] = "うさぎさん";
$out[3] = "からす";
$out[4] = "ねこ";

という @out を用意して以下のようにすると、

my @sorted = sort { length($b) <=> length($a) } @out;

長さでソートが行われます。おそらく長い順に並び替えが行われるので

$sorted[0] = "もりくぼしょうたろう";
$sorted[1] = "うさぎさん";
$sorted[2] = "からす";
$sorted[3] = "いぬ";
$sorted[4] = "ねこ";

となると思います。

ここからが質問なのですが、
@out の他にもうひとつ @out と同じ数の変数を用意して、

$out_hitokoto[0] = "わんわん";
$out_hitokoto[1] = "いくぜ!相棒!";
$out_hitokoto[2] = "ぴょんぴょん";
$out_hitokoto[3] = "カァーカァー";
$out_hitokoto[4] = "にゃにゃーん";

@out_hitokoto は @out と対応しています。しかし、@outをソートすれば、
対応している@out_hitokotoも並べ替えを行わなければなりません。

ハッシュ変数はある事情から使えません。


なにかよい方法はないでしょうか?

できれば、

my @sorted = sort { length($b) <=> length($a) } @out;

の次の文章で@out_hitokotoに変化を起こさせたいのですが。

みなさんは、どうしますか?

A 回答 (2件)

#1 のやり方は「シュワルツ変換」の一種だと思う. ただし, 単純に添え字をソートした方が速いかもしれない. 例えば


my @lengths = map { length } @out;
my @indices = sort { $lengths[$b] <=> $lengths[$a] } 0..$#out;
とする手もある.
    • good
    • 0
この回答へのお礼

ありがとうございました。 きちんと動きました!

お礼日時:2013/05/24 09:06

一例



参考URL:http://ideone.com/2pC2Sc
    • good
    • 0
この回答へのお礼

おお! for分の中身がなにやらわかりませんが、ありがとうございます。
ひとつひとつ読んでみます。

お礼日時:2013/04/03 07:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!