CGIを使ってデータを組み合わせてソートする方法

このQ&Aのポイント
  • jcode.plを使用してCGIを作成しています。与えられたデータを組み合わせ、昇順にソートする方法を教えてください。
  • データの組み合わせパターンを生成し、それを昇順にソートさせる方法を教えてください。CGIを使用してjcode.plで作業しています。
  • CGIを使ってデータのフィールドを組み合わせ、昇順にソートする方法を教えてください。データの数字はサンプルで、データの組み合わせパターンを生成したいです。
回答を見る
  • ベストアンサー

ソートについて

過去にも似たような質問を立てさせて頂いておりますが、今回はちょっと違うのかな?と思い、Qさせて頂きます。 jcode.plを使ってCGIを作成しています。 @data=(13,5,7,2,10,9,6)というデータがあり、これを下記のように何パターンかにしたいのです。(データの数字はサンプルです) 例:5-7-13、2-7-13、2-5-7、・・・etc 何を言いたいかというと、「フィールド1 - フィールド2 - フィールド3」や、「フィールド2 - フィールド3 - フィールド4」、「フィールド1 - フィールド3 - フィールド4」というように区切り、それを昇順にソートさせたいのです。 このような場合の記述方法を御教え願えますでしょうか?

  • CGI
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.1

質問の意図や目的が、上記文章では全然理解できないので、私の解釈が意図とハズれてたらごめんなさい。 要するに、配列の全ての要素に対して、総当りで、3 つの数字の組み合わせを作り、ハイフンで区切り、その数字がソートされていればいいんでしょうか。 そして、その組み合わせを全パターン作ればいいんでしょうか。 同じ組み合わせ (たとえば 13-13-13 とか) は作らないって事でいいんですよね? --- my @data = (13, 5, 7, 2, 10, 9, 6); my @sorted = (); for(my $i = 0; $i < @data; $i++){ for(my $j = 0; $j < @data; $j++){ next if $j == $i; for(my $k = 0; $k < @data; $k++){ next if $k == $i || $k == $j; push(@sorted, join '-', sort{ $a <=> $b }@data[$i, $j, $k]); } } } print join "\n", @sorted; --- これでどうでしょうか。 (もっといいアルゴリズムはありそうですが、とりあえず…)

macky0225
質問者

お礼

ご回答ありがとうございます。 意図するコトの説明って難しい・・・以前から説明下手なもので・・・(^^ゞ でも、「nipotan」様の御解釈どおりです。理解してくださってありがとうございます。さっそく教えて頂いたソースを使ってみます。

関連するQ&A

  • Access テキストデータのソートについて

    Accessでのテキストデータのソートの仕様で悩んでます。 例を挙げると・・・ テキスト型のフィールドに対し以下のようなデータを入力します。 フィールド1 9-1 9-001 9-0001 90-1 90-001 900-1 900-11 9000-1 9001-1 90000-1 ここでフィールド1を昇順でソートをすると 90000-1 9-0001 90-001 9000-1 9-001 900-1 900-11 9001-1 90-1 9-1 という順になってしまい、並び方に一貫性が無いように思えます。 なぜこのような並びになってしまうのか? お判りになられる方、いらっしゃいませんか??

  • ソートについて

    同様の回答があったら申し訳ありません。 現在CGIにてリストを作成しています。現状、書いた順番によってリストが作成されていますが、書き込まれたファイルのある1フィールドで昇順にソートさせたいのですが、うまくいきません。 ファイルレイアウト(例)↓ ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17) 上記のようなレイアウトのファイルで、「$9」>「$10」(?)の条件(第一条件が$9、第二条件が$10です)でソートさせる場合、どの様なコマンドを書けば良いのでしょうか?

    • ベストアンサー
    • CGI
  • ヒープソートは2重ソートできない?

     ソートに関して詳しい方、相談にのっていただけたらと思います。  CGIを使ってヒープソートするロジックを組みました。  そのルーチンはただ単項データをソートするだけでなく、たとえば、配列変数 n1 と 配列変数 n2 にそれぞれデータが入っていたとき、n1 をソートすると、それに連動して n2 の中身も一緒にソートされます。  言うならば、バラバラに並んだビデオテープを番号順に並べ替えると、一緒にタイトルも並べ変わる感じです。  ところが、配列 n1 をソートしていてたまに同じ数字が入っていることがあります。そういうときは n2 の順にしたいのです。  そこで、先に n2 をソートしてから n1 をソートするといいのではと考え、そのようにプログラムを組んでみました。  ところが実際には、n1 をソートした瞬間に、せっかく並べ替えた n2 の内容がバラバラになってしまうのです。  「n1 の内容が同じ場合は n2 を昇順に並べる」という処理を記述していても、実際には n2 の内容はバラバラです。  これはヒープソートを使用している限り仕方のないことなのでしょうか。あるいは何らかの解決方法を知っている方、よろしくお願いします。

  • メールフォームを2つ設置するには

    違う項目のメールフォームを2つ設置するため 下記のように作りました。 1、CGIフォルダの中にmail.cgiとjcode.plが入っている 2、CGIフォルダの中にmail2.cgiとjcode.plが入っている 1のフォームは送受信できるのですが、 2のフォームで送信すると1のフォームを呼び出してしまいます。 CGI2フォルダを作り送信するのも試しましたが、同じ結果でした。 jcode.plの記述は変えていません。 2のフォームで1のフォームが呼び出される原因について ご教授をお願い致します。

    • ベストアンサー
    • CGI
  • jcode.plアップロード不要の場合の設定変更

    CGI設置にあたり、設定変更で悩んでいます。 jcode.plがサーバーにプリインストールされているためアップロードは不要で、require 'jcode.pl'; と記載するようにとのことです。 require "./jcode.pl"; となっているものについては問題なかったのですが、 $jcode = './jcode.pl'; 中略 require $jcode; と記述されているものを、どのように書き換えたらよいのか分かりません。 ご教授のほど、どうぞよろしくお願い致します。

    • 締切済み
    • CGI
  • TinyTableというスクリプトのソートについて

    テーブルをソートできる下記のソースを使っているのですが、デフォルトで一列目の「ID」を降順でならばせたいのですがどのように設定をすれば良いでしょうか? 【サンプルデモ】 http://sandbox.scriptiny.com/table-sorter/index. … 【参考サイト】 http://shanabrian.com/web/library/tiny_table.php 参考サイト内に、 1<script type="text/javascript"> 2 var sorter = new TINY.table.sorter("sorter"); 3 // sorter.init(テーブルのID名, 初期ソート開始番号); 4 // (左セル 0番からが開始番号となります。) 5 // なお、初期ソートが不要であれば、,(カンマ)を含めて削除してください。 6 // 例:sorter.init("sample"); 7 sorter.init("sample", 1); とあったため、「sorter.init("sample", 0);」と変更したのですがどうしても「昇順」となってしまいます。 これをIDの数字が大きい順(降順)にデフォルトで並び替えるにはどのようにすれば良いでしょうか? よろしくお願いいたします。

  • TinyTableというスクリプトのソートについて

    テーブルをソートできる下記のソースを使っているのですが、デフォルトで一列目の「ID」を降順でならばせたいのですがどのように設定をすれば良いでしょうか? 【サンプルデモ】 http://sandbox.scriptiny.com/table-sorter/index.html 【参考サイト】 http://shanabrian.com/web/library/tiny_table.php 参考サイト内に、 1 <script type="text/javascript"> 2 var sorter = new TINY.table.sorter("sorter"); 3 // sorter.init(テーブルのID名, 初期ソート開始番号); 4 // (左セル 0番からが開始番号となります。) 5 // なお、初期ソートが不要であれば、,(カンマ)を含めて削除してください。 6 // 例:sorter.init("sample"); 7 sorter.init("sample", 1); とあったため、「sorter.init("sample", 0);」と変更したのですがどうしても「昇順」となってしまいます。 これをIDの数字が大きい順(降順)にデフォルトで並び替えるにはどのようにすれば良いでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • datetime型でのソート

    初心者のため、初歩的な質問か判りませんが宜しくお願いします。 datetime型のフィールドに下記のようにまちまちの年月日、時間のデーターが入っているのですが、年月日は無視して、時間だけでソートを したいのです。 例えば下記のようなデータがあるとして 1998/3/21 15:12 2007/5/5 12:00 1980/1/1 8:00 これを普通に並べ替える(order by フィールド名 asc)と下記のようになるのですが 1980/1/1 8:00 1998/3/21 15:12 2007/5/5 12:00 これを年代は関係なく時間だけで、下記のように並べ替えたいのです 。 1980/1/1 8:00 2007/5/5 12:00 1998/3/21 15:12 どうすれば良いのか、教えて頂けないでしょうか?

  • ちょっと特殊なソート

    ソートプログラムを作りたいんですが、ちょっと特殊なんです。 入力データとして 5 2 4 8 1 4 みたいに、スペースで区切られた数字および文字列があります。それをスペースまでを一区切りとしてソートしていきたいのです。上の例だとこんな感じ。 2 4 5 1 4 8 どういう風に設計するのがいいと思いますか? シェルスクリプトに埋め込みたいので、できるだけコードを短くしたいのですが… 教えてください。

    • ベストアンサー
    • Perl
  • バブルソート、あなたはどちら派?

    昇順にソートする場合ですが、 配列の先頭とその次の値を比較し、大きい数字の方を後ろへ持っていくパターンと 配列の最後とその手前を比較し、小さい数字を前へ持っていくパターンがあると思います。 前者のほうが、湖底から水面へ泡がだんだん大きくなっていくバブルのイメージで 長年これがスタンダードだと思っていたのですが、 後者についてを「小さい泡がだんだん移動していくイメージなのでバブルソートと言う」と 断言しているサイトや書籍もあります。 どちらも間違いではないと思います。 ですが、他人に教えることを想像したとき、 どちらかというと先に前者を教えてから、後者のやり方もあるよと伝えた方が 直感的に理解しやすいかなと思いました。 皆さんはどちら派ですか? また、前者と後者を使い分けるメリットがもしもあればご教示頂けませんか?

専門家に質問してみよう