>複数の変数を持つ値のsort入力中の回答があります。ページを離れますか?※ページを離れると、回答が消えてしまいますページを離れるA回答を続ける入力中のお礼があります。下記のようにx(\d+)y(\d+)z(\d)形式で構成されている値をもつリストがあった時に、期待値のようにzxyの優先順でsortしたいのですが、よろしくお願いします。;期待値の順x1024y2z2x1024y4z2x1024y4z3x2048y2z3x1024y2z5通報するこの質問への回答は締め切られました。Perl」に関するQ&A:perlの比較、ループの使い方について質問です。23:41サブルーチンを持つsort関数を使うと複雑なソートも表現できます。$v2y;}それぞれx,y,zの数字を分解して、z,x,yの順番に比較していきます。通報するこの回答へのお礼sortの{}内にsubファンクションもいけるのですね。この処理は多用するので、この記述はかなりうれしいです。コピーして、モジュール化してしまおうと思ってます。16:42No4hrm_mmmです。一個入り、さらにその先頭に元データを保持させているので、ということは、sort文の配列添え字番号は1ずつずれますね。通報するこの回答へのお礼わざわざご丁寧にありがとうございます。16:12ややトリッキーになりますが、シュワルツ変換とハッシュを使った方法も回答しておきます。@list;解説:/([xyz])(\d+)/gこれはxかyかzと、値の2項からなるリストを(gオプションによって)可能な限り展開します。/^(x)(\d+)(y)(\d+)(z)(\d+)$/でも構いません。}こういった無名ハッシュを作成します。こんな展開を@list回だけで済ませるのがシュワルツ変換です。通報するこの回答へのお礼ありがとうございます。こんなに短いコードでも書けるのですね。自分ではなかなかこういうコードが書けませんが勉強になります。]を参考にすると、こんな感じにもできます。"\n";まあ、無理に1行につっこむ必要もないのだけど、perlだから出来る技ですね。通報するこの回答へのお礼ありがとうごあざいます。mapとsortの合わせ技なのですね。通報するこの回答へのお礼ありがとうございます。21:42算術比較演算子<=>は、同値のとき0を返し、Perlでは0はfalseなので、1つめの<=>で判定がつかない場合は、2つ目の<=>で大小を判定するよう、||でつないでいく形にすれば、ソートキーが複数の値からなる場合でも単一の式として表現できます。これをシュワルツ変換にかければ、大抵ソートできます。値の桁が事前に限定できるなら、単一の値を生成してキーにできます。通報するこの回答へのお礼ありがとうございます。値の桁数は限定できるので使えそうです。複雑なsortの具体的な書き方が分からなかったので勉強になりました。ファイルの配列のリストデータ(変数)の特定の変数の値だけを変えたい。Inc.Q質問する(無料)Q&A検索goo検索gooIDで新規登録・ログイン新規登録する(無料)会員の方はこちら外部サービスのアカウントで新規登録・ログインYahoo!で新規登録・ログインGoogleで新規登録・ログインTwitterで新規登録・ログインFacebookで新規登録・ログインdアカウントで新規登録・ログイン※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。会員でない方、会員になるとあなたも質問や回答ができるようになります!!親切・丁寧な回答が集まる場30分以内に回答がもらえ回答数は平均3件!匿名(ニックネーム)での投稿なので。