- ベストアンサー
配列要素の並べ替え
$Res[$i]という配列に、数字の要素が入っているんですが、それを昇順で並べ替えして要素の間に/を入れたいのですが、 foreach (sort {$a cmp $b} keys %Res) { $Res2 = $Res[$i] + "/" } どうもこの記述では上手くいかないので、どなたか教えて下さい!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
普通の配列が 0,1,2,3,...と、数字で要素を表すのに対し 名前(key)で表すのが、連想配列です。こんな風に表現します。 $person{'name'} 全体を示す場合は、'%'を使います。FORMで入力された値を受け取るのに、必須と言えるでしょう。 ご希望の内容を実現するには ↓ でOKです。下記の書籍にまんまっ、載ってます。 @Res2 = sort by_number @Res; sub by_number { if ($a < $b) { -1; } elsif ($a == $b) { 0; } elsif ($a > $b) { 1; } } "/"はこんなところで文字列演算しなくても、HTML(?)を吐き出す時に、付け加えればやればよろしい。 ===== お願い ===== まず、よい参考書を手元においてください(私もクドイね)。ほとんどのことは、それで解決します。 推奨は、「Learning Perl (邦訳:初めてのPerl)」通称ラクダ本。表紙のラクダの絵でスグに分かります。 もう一冊続編(?)で、「Programming Perl (邦訳:Perl プログラミング)」 どこの書店でもあると思います。 ==============
その他の回答 (2)
- kaitou-man
- ベストアンサー率60% (86/141)
cmpは数値の比較ではなく文字列の比較です。 keys %Resでは、Resというハッシュ(配列ではない)のキー値のリストが得られてしまいます。(よって、おそらく空) sortした結果でforeachしても、$iなんていう変数には何も入りません。 $Res2 = join('/', sort {$a <=> $b} @Res); でしょうか。
お礼
道理で、何も結果を得られなかったんですね。 確かに昇順で並べ替え出来ているようなのですが、 結果の$Res2をprintしてみても、何も表示されなかったんです(ーー;)
- osamuy
- ベストアンサー率42% (1231/2878)
質問タイトルからは只の配列の事についてのものと読み取れますが、 「%Res」を持ち出しているところを深読みして、連想配列についての事のように思えます。 しかし、「$Res[$i]」は@Resの要素にアクセスするものだから、やっぱり、只の配列の事かもしれない。 というところで、配列と連想配列の記述の仕方について、確認されてみては。 純粋に、 > $Res[$i]という配列に、数字の要素が入っているんですが、それを昇順で並べ替えして要素の間に/を入れたい という事なら、 @Res = (1,6,4,8,2); $Res2 = join( '/', sort @Res ); print $Res2, "\n";
補足
初心者なので、連想配列というものが分かりません。 $Res[$i]という配列変数には、固定数値ではなく、条件によって動的な数値が格納されて、更に格納されている内容の数値の昇順で、配列の順を変えたいんです。
お礼
今度こそ、思っている通りに出来ました!! 勉強しはじめて一ヶ月の、まだまだ初心者なので、とても謝々ですm(_ _)m 教えて頂いた本を片手に、もっと勉強してみようと思います!!(^^)