• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Action Script 2.0 配列の比較)

Action Script 2.0 配列の比較

BlurFiltanの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

チェックボックスのインスタンス名や値の設定方法などなどによって 値の取得方法は変わるのでパスします(書けません)。 ですから 配置したチェックボックスのチェック結果からは すでに > A配列[1,4,5,6,7,8] > B配列[1,2,3,4,5,6,7,8] > C配列[1,2,8,9,10,11] などの配列は取得できているものとします。 それと > 結果として > ○完全一致の場合の処理 > ○一致項目が多い場合の処理 この2行の具体的な意味がよく理解できないため この部分はパスさせていただきます。 > ○3つとも同じ場合の処理 これはなんとなくわかる気がするので 私なりの解釈を下記スクリプトに入れています。 ステージ上に用意する「判定をするボタン」のインスタンス名は「btn」であるものとします。 その「btn」が存在するタイムライン(_root なら _root)の フレームに書くスクリプト例です。 //--------------------------------------------- //アンサー配列「ans_arr」を用意 var ans_arr:Array = [1, 2, 3, 4, 6, 8]; //解答の配列「A_arr」「B_arr」「C_arr」の要素を //何らかの方法で取得しできているものとする var A_arr:Array = [1, 4, 5, 6, 7, 8]; var B_arr:Array = [1, 2, 3, 4, 5, 6, 7, 8]; var C_arr:Array = [1, 2, 8, 9, 10, 11]; //ボタン「btn」クリック時の動作 btn.onRelease = function() { //もしチェックが5個以下(5個も含める)のものがある場合は if (A_arr.length<=5 || B_arr.length<=5 || C_arr.length<=5) { //この関数を抜ける(何もしない) return false; } // //配列「A_arr」「B_arr」「C_arr」と //その各配列名と //各アンサーと同じ個数をカウントする変数を入れる //オブジェクトをまとめた配列「rec_arr」を作成 var rec_arr:Array = new Array(); rec_arr[0] = {arr:A_arr, str:"A_arr", cnt:0}; rec_arr[1] = {arr:B_arr, str:"B_arr", cnt:0}; rec_arr[2] = {arr:C_arr, str:"C_arr", cnt:0}; // //「ans_arr」の各要素を「@(何でも良い)」区切りの文字列にする var ans_str:String = ans_arr.join("@"); // //「rec_arr」内のループ(「A_arr」~「C_arr」に関するループ) for (var i:Number = 0; i<rec_arr.length; i++) { for (var j:Number = 0; j<rec_arr[i].arr.length; j++) { //もし「ans_str」に「A_arr」~「C_arr」の各要素があれば if (ans_str.indexOf(rec_arr[i].arr[j]) != -1) { //その配列対応のcntに1を加算 rec_arr[i].cnt++; } } } // //配列「rec_arr」を cnt を数と見たキーとして降順でソート rec_arr.sortOn("cnt", Array.DESCENDING | Array.NUMERIC); // //---結果を出力--- // ○3つとも同じ場合の処理 if (rec_arr[0].cnt == rec_arr[1].cnt && rec_arr[1].cnt == rec_arr[2].cnt) { trace("カウントは全て"+rec_arr[0].cnt+"で同じです。"); //2つが同じ場合の処理 } else if (rec_arr[0].cnt == rec_arr[1].cnt) { trace("カウントが最多の配列…"+rec_arr[0].str+"と"+rec_arr[1].str); trace("最多カウント数…"+rec_arr[0].cnt); } else { trace("カウントが最多の配列…"+rec_arr[0].str); trace("最多カウント数…"+rec_arr[0].cnt); } }; //--------------------------------------------- ・ActionScript 2.0 ・Flash MX 2004 以上で使用可 ・Flash Player 6 以上で動作可 「制御」→「ムービープレビュー」で ボタン「btn」をクリックしてもらうと trace の出力結果が見えると思います。

tomo6333
質問者

お礼

ご回答頂きありがとうございます! 詳しくScriptのサンプルまでご教授頂きありがとうございます。解決方法に色々なやり方があるんだなと、とても勉強になりました。 お忙しいところ、ありがとうございました。

関連するQ&A

  • 配列の比較(大変申し訳ありません再度質問です。)

    以前ActionScriptの配列の比較で一度ご質問させて頂き解決(DPE様へご教授頂き)したのですが、その後改良しまた問題が出てきてしまいました。 複数のチェックボックスの値(true,false)を取得して配列に格納し、別の配列(A、B、C)と比較をし一致項目の多い配列を決める処理で 「全てのチェックボックスの選択状況を集めたデータを作り、同じ数のデータ同士で比較」という方法をご教授頂き参考のScriptまで書いて頂いたのですが http://okwave.jp/qa/q7608367.html 例として・・・・ ・チェックボックスが9個あり ・それぞれ、1~9まで任意の名前がついております。 ・チェックされた値を取得し アンサー配列[2,3,4]を作った場合 一致項目が多いもの A配列[1,2,3,4,7,"サンプルA"] この場合3個同じ B配列[1,2,3,4,5,6,7,9,"サンプルB"] この場合3個同じ C配列[2,3,7,8,"サンプルC"] この場合2個同じ 現状同数の場合、A配列「サンプルA」が表示されます。 1つのみ表示をさせているんですが、最大の数で同数の場合(3が一致項目が多い)、複数表示という仕組みに切り替えたいと四苦八苦しておりました・・・(T_T) 結果的に「サンプルA、サンプルB」というように表示させたいのです。 ※完全一致なら表示されるのは1つだけになります。 解決済みの問題を再度掘り返すようで大変申し訳ありませんが、どなたかご教授頂ければとおもいます。よろしくお願いたします。 説明が上手くできてなくて、意味不明や、何か問題などございましたらすぐに対応させて頂きますのでご連絡頂ければとおもいます。 ※DPE様にご教授頂きましたScriptを若干変更し現在利用しております。 現在のScript //*** /*  初期設定 */ //チェックボックスの選択状況を格納する配列 var check_status:Array = new Array(); //チェックパターンデータ //最後の要素はパターン名 var check_ptt:Array = [ [ 1 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , "サンプルA" ] , [ 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , "サンプルB" ] , [ 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , "サンプルC" ] ]; //評価を格納する配列 var score_tbl:Array = new Array(); //チェックボックスの総数 var box_max:Number = 9; //チェックボックスが配置されているタイムラインを保持 var box_line:MovieClip = this; /*  照合の処理 */ function Check_Compare():Void {  var i:Number , j:Number;  var score:Number , check_score:Number;  var flags:Number;  //選択状況とパターンを総当たりで照合する  for( i = 0 ; i < check_ptt.length ; i++ )  {   //評価をリセット   score = 0;   check_score = 0;   for( j = 0 ; j < box_max ; j++ )   {    //選択されるべき項目との一致を照合    //両方とも1(選択されている)である場合、評価が+1、それ以外は加算されない    check_score += check_ptt[ i ][ j ] & check_status[ j ];    //全体の照合処理    //一致していた場合、評価が+1、それ以外は加算されない    score += Number( check_ptt[ i ][ j ] == check_status[ j ] );   }   //デバッグ   trace( "Score " + i + " = " + score );   trace( "Check_on " + i + " = " + check_score );   //評価を記録する配列変数に結果を記録   //フィールド名   // ptt_no:パターンの番号   // check_on:選択するべき項目と一致した数   // total_score:総合評価   score_tbl[ i ] = { ptt_no : i , check_on : check_score , total_score : score };  }  //評価の高い順に並べ替え  //選択するべき項目と一致した数が多いものほど高評価  //同点の場合は総合評価で優劣を決める  flags = Array.NUMERIC | Array.DESCENDING;  score_tbl.sortOn( [ "check_on" , "total_score" ] , [ flags , flags ] );  /*ここに、評価を利用する処理を書く*/  /*今回は一致した数が最も多かったパターンの名前を出力*/  /*ダイナミックテキストに出力*/  t1 = check_ptt[ score_tbl[ 0 ].ptt_no ][ box_max ] ); } /*  照合開始ボタンの処理 */ btn.onRelease = function():Void {  var i:Number;  //選択状況を配列変数に格納  //選択されている場合1、されていない場合は0を入れる  for( i = 0 ; i < box_max ; i++ )  {   check_status[ i ] = Number( box_line[ "cbox" + i ].selected );  }  //パターンと照合する  Check_Compare(); }; //***

    • ベストアンサー
    • Flash
  • 2つの配列要素を比較して、一致しない要素を別配列にしたい

    配列A、配列B、配列C と仮にします。 配列Aから、配列Bと一致しなかった要素の値を配列Cに入れる (一致した分を除外したい) みたいなことをデータベースを使用せずに、Perlで実現したいのですが可能でしょうか?

    • ベストアンサー
    • Perl
  • 配列を比較して同じものがあった場合にそのKEYを返す

    二つの配列を比較して同じ値が入っていた場合、そのKEYを配列に入れたいと思います。 (例)$aと$bを比較して同じ値が入っているときに$aのkeyを$cに格納したい。 $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); ※空白は無視したい。 この場合 $c = array("4","5","7","8"); のようにしたいと思います。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • シート上のオプションボタン、チェックボックスを配列にする。

    シート上のオプションボタン、チェックボックスを配列にする。 Excel2003です。 シート上にオプションボタン、チェックボックスを増やすと、OptionButtonN、CheckBoxN (大文字Nは任意の数値)となります。これをOptionButton(N)のように配列にできないでしょうか? プログラムで扱う場合、配列でしたら処理が楽になると思うからです。 また、同じくシート上にオプションボタンを配置するとどれか1つしか選択できません。(ひとつしかValueをTrueにできません。) UserFormのようにFrameがあればその中で1つを選択できるのですが、シート上に直接配置する場合、Frameが扱えないように思います。グループ化して複数選択する方法はないでしょうか。 よろしくお願いします。

  • 配列の重複削除について

    配列の重複削除について教えて下さい。 普通の重複チェックとは違い、3つの配列 それぞれに値があり、添え字が0から同じ ように始まり、3つの配列が全て同じものは、 例えば、 配列A[2]='30' 配列B[2]='000' 配列C[2]='1' 配列A[4]='30' 配列B[4]='000' 配列C[4]='1' は、1つの添え字にまとめたい。 その3つが一致したもの重複をまとめたいのと、 新しく出た3つの値は残したいのです。 つまり、以下のように抽出したいのです。 何か良い方法があれば教えて下さい。 perlで作成しています。 注)配列Cは空白もあります。 配列A( 10, 20, 30, 10, 30, 20) 配列B(000,010,000,010,000,000) 配列C(  , 0, 1, 0, 1, 1) ↓ 配列D( 10, 20, 30, 10, 20) 配列E(000,010,000,010,000) 配列F(  , 0, 1, 0, 1)

    • ベストアンサー
    • Perl
  • perlでの配列について

    配列の配列について教えてください。 以下のようなテキストから値を取得し、A,B,Cの値をそれぞれ別の配列に格納し、A,B,Cの平均値を出す処理を行っているとします。 ----- A=100 B=200 C=300 A=110 B=210 : ----- 現状、以下のような状態です。 @arrayA=(); @arrayB=(); @arrayC=(); : (テキストを読み込み) : ・読み込んだ行がA=XXXならarrayAにpush push(@arrayA,"100"); ・読み込んだっ行がB=XXXならarrayBにpush push(@arrayB,"100"); : (各配列の要素の平均値を出す) このやり方だと、グループが増えるとそのまま行数が増えて冗長なので、グループごとの配列を1つの配列にまとめたいのです。 Webで初期値を入れた形で説明しているのはよくみるのですが、今回のように空の配列に値をいれていくにはどうすればよいのでしょうか?(そもそも宣言の仕方もわかりません)。 また、配列の配列?とした場合、以下のような処理はできるのでしょうか? (1)配列の1つ目の要素(の配列)にpushする(現状でのarrayAにpushに該当) push(@arrayAll[0],"test");

  • 配列の比較について・・・困ってます・・。

    ご質問させていただきます。 これは、fin2というファイルから数値を抜き出し配列に格納して、finの文字列と比較し、その文字列のある場所で配列の数値と比較し、合致したら、ある出力をするというものなんですが、 配列に格納した数値が、 a[1]=[123] b=[234] a[1]=[345] b=[400] というふうに増えていくときは問題ないですが、途中でたとえば a[n]=100 b[n]=400 a[n+1]=300 b[n+1]=358 という風にn+1番目のaより、n番目のbが大きいときに、止まってしまうんです、これをうまく処理して最後まで比較させたいんですが、どうしてもうまくいきません。どなたかたすけてください。やはり、 n==b[yabu]の処理の後になんか書けばいいんでしょうか?長々と申し訳ございませんでした。 if(fin2!=NULL) { int yabu=0; for(int i=0; fgets(c,CHARMAX,fin2)!=NULL;i++) { sscanf(c,"%d%*c%*c%d",&a[yabu],&b[yabu]); fprintf(fout2,"%d::::::::::::::%d:%d\n",yabu,a[yabu],b[yabu]); yabu++; } } int yabu=0; n=0; while(fgetc(fin)!=EOF) { n++; if(n==a[yabu]) { fprintf(fout2,"A "); } else if(n==b[yabu]) { fprintf(fout2,"B "); yabu++;} else {fprintf(fout2,"C "); } } printf("%d\n",yabu);

  • C#でのコントロール配列について

    C#でのコントロール配列について ピクチャーボックスを配列にして動的生成しています (日本語おかしい…?) そこで質問です。 あるピクチャーボックスをクリックすると クリックされたピクチャーボックスの値(?)とかを取得 (たとえば、Nameとか) 1つだけの場合なら、イベントのClickでできたんですが 配列にすると、どうすればいいのかわからなくなりました わかりやすいサイトとかあったら教えてください!

  • 複数のチェックボックス&配列にランダムな数字

    こんにちは。PHP学習中のものですが、今回はこちらで質問させていただきます。 現在、複数のチェックボックスをワンクリックですべて選択する方法を調べています。 チェックボックスのNAMEがすべて同じ場合は、ちょっと検索すれば、すぐにサンプルスクリプトがたくさんヒットします。 複数選択可能なチェックボックスの場合も、document.form1.elements["sample_check[]"] というような記述で、チェックボックスの数がカウントできるということまでは判りました。 しかし、現在わたしが扱っているチェックボックス(下記をご参照ください)には、sampla_check[3] のように規則性のない数字が入っているのです。 (この数字を送信先で受けて、それをもとにmySQLのデータを更新するので省略できません) このような場合、どのようにしたら「チェックボックスをすべて選択」する機能を実装できるでしょうか。 本来、javascriptの入門書でも購入して、自分で学習すべき範疇のことかと思いますが、今すぐ答えが必要なので、どなたかお助けいただけないでしょうか。 <INPUT TYPE="checkbox" NAME="sample_check[3]" VALUE="TRUE"> 項目(3) <INPUT TYPE="checkbox" NAME="sample_check[7]" VALUE="TRUE"> 項目(7) <INPUT TYPE="checkbox" NAME="sample_check[12]" VALUE="TRUE"> 項目(12)

  • 配列型みたいなもの

    テーブルの設計について質問です。 例えば、入力フォームの複数のチェックボックスの値をテーブルで持つ場合どのように管理するのが一般的でしょうか? 文字列でしょうか?配列型みたいなのがあれば便利だなぁと思いました。 ちなみに仕様DBはMySQLです。