トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     二次元配列への値の設定
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
machu
Åê¹ÆNo.2928
投稿日時: 2004-1-16 2:48
新米
居住地:
投稿: 12
使用環境:
.3.2
二次元配列への値の設定
こんにちは、machuです。
たびたびお世話になります。

2次元配列に、インデックスを変数で指定して値を設定したいのですが、出来ません。traceしても何も表示されない状態です。

変数の宣言の際に、あらかじめ0を設定しておくと(clp= new Array([0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],…)のように)、想定通りのカウント数が、配列に設定されます。ですが、実際は配列の長さは一定にはならないので、上記のような方法で初期値を設定する方法はさけたいのです。初期値を設定しないと、値って代入できないのでしょうか? 初歩的な質問ですいません。

参考までに、ソースを添付します。
処理の内容は、num個(書き込まれたら増えていく)の書込みメッセージの文字列を比較して、同じ文字がいくつあるかカウントするというものです。

function matchChar(num){
 clp= new Array();
 for(iA=0;iA<num;iA++){
  mesA=mes_txt.text;
  lenA=mesA.length;
  for(iB=0;iB<num;iB++){
   mesB=mes_txt.text;
   lenB=mesB.length;
   clp[iA][iB]=0;
   if(iA != iB){
    for(n=0;n<lenA;n++){
     figA=mesA.charCodeAt(n);
     if(rangeS < figA){
      if(figA<rangeE){
       for(m=0;m<lenB;m++){
        figB=mesB.charCodeAt(m);
        if(figA==figB){
         clp[iA][iB]++;
        }
       }
      }
     }
    }
   }
  }
 }
}
machu
Åê¹ÆNo.2929
投稿日時: 2004-1-16 4:24
新米
居住地:
投稿: 12
使用環境:
.3.2
Re: 二次元配列への値の設定
ごめんなさい。子羊の部屋に投稿しようとして間違えました……。
笠居トシヒロ
Åê¹ÆNo.2933
投稿日時: 2004-1-16 9:46
マスター
居住地: 兵庫
投稿: 870
使用環境:
SnowLeopard, Safari4, CS4
Windows7, IE8, CS4
Re: 二次元配列への値の設定
引用:
machuさんは書きました:
ごめんなさい。子羊の部屋に投稿しようとして間違えました……。

いえ、この部屋で質問するのが適切だと思いますので、このままにしておきますね。
こういった「カテゴリ」がハッキリしている質問の場合は、ご自分のレベルより、
質問の性格で投稿場所を選んで下さったほうがいいですよ。


----------------
笠居 マッドシー
http://www.mad-c.com/

野中文雄
Åê¹ÆNo.2935
投稿日時: 2004-1-16 10:16
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 二次元配列への値の設定
2次元配列を、どのように作成されているのでしょうか?
引用:
machuさんは書きました:
2次元配列に、インデックスを変数で指定して値を設定したいのですが、出来ません。traceしても何も表示されない状態です。

値を未定義(undefined)にしておけばよいのではないですか? 配列に、初期値を入れる必要はありません。しかし、配列の初期化は必要です。
引用:
変数の宣言の際に、あらかじめ0を設定しておくと(clp= new Array([0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],…)のように)、想定通りのカウント数が、配列に設定されます。ですが、実際は配列の長さは一定にはならないので、上記のような方法で初期値を設定する方法はさけたいのです。初期値を設定しないと、値って代入できないのでしょうか? 初歩的な質問ですいません。

スクリプトやムービーに前提があるときは、それもご説明ください。たとえば、以下のスクリプトでは、スクリプトと同じタイムラインにTextFieldインスタンスmes_txtが必要と思われます。スクリプトの記述されているタイムライン、アクションの種類(MovieClip/Button/フレーム)なども、ご記載ください。とくに、正しく動作しないスクリプトの解析は、むしろ困難な場合が少なくありません。

また、今回は配列の作成が問題だという絞込みはできているのですから、その部分のみ切分ければ、2?3行のスクリプトで原因の追及はできると思われます。
clip = new Array();
clip[1] = 1;
clip[2] = [2, 3, 4];
clip[0][0] = 0;
trace(clip[0]);  // 出力: undefined

// [デバッグ]>[変数のリストアップ]
変数 _level0.clip = [オブジェクト #1, クラス 'Array'] [
1:1,
2:[オブジェクト #2, クラス 'Array'] [
0:2,
1:3,
2:4
]
]
引用:
参考までに、ソースを添付します。
処理の内容は、num個(書き込まれたら増えていく)の書込みメッセージの文字列を比較して、同じ文字がいくつあるかカウントするというものです。
function matchChar(num){
 clp= new Array();
 for(iA=0;iA<num;iA++){
  mesA=mes_txt.text;
  lenA=mesA.length;
  for(iB=0;iB<num;iB++){
   mesB=mes_txt.text;
   lenB=mesB.length;
   clp[iA][iB]=0;  // 【配列中clip内のサブ配列が初期化されていません】
   trace(clp[iA]);  // 確認用
   trace(clp[iA][iB]);  // 確認用
   // [後略]

以下は、m×nの配列を初期化する関数のサンプルスクリプトです。たとえば、2×5の配列は、つぎのように作成します。

// 関数と同一のタイムライン
my_array = xMultiArray(2, 5);
trace(my_array.length); // 出力: 2
sub_array = my_array[0];
trace(sub_array.length); // 出力: 5

値はすべて未定義(undefined)に設定されます。しかし、第2引数を無指定にすれば、サブ配列の長さは0に設定されます。

my2_array = xMultiArray(5);
trace(my2_array.length); // 出力: 5
sub2_array = my2_array[4];
trace(sub2_array.length); // 出力: 0
// フレームアクション
function xMultiArray(nRow, nCol) {
	var return_array = new Array();
	for (var i = 0; i<nRow; ++i) {
		if (nCol) {
			return_array.push(new Array(nCol));
		} else {
			return_array.push(new Array());
		}
	}
	return return_array;
}

上記関数は、ifアクションの判定をforループの外に記述した方が、処理としては効率的です。ただ、スクリプトが長くなるので、このようにしました。


----------------
 

machu
Åê¹ÆNo.2961
投稿日時: 2004-1-16 21:58
新米
居住地:
投稿: 12
使用環境:
.3.2
Re: 二次元配列への値の設定
machuです。
問題解決しました。ありがとうございます。

引用:
配列に、初期値を入れる必要はありません。しかし、配列の初期化は必要です。

初期化は必要なのですね。
初期化の方法がよくわからなかったので、サンプルスクリプトを書いていただいて参考になりました。
machu
Åê¹ÆNo.2962
投稿日時: 2004-1-16 21:59
新米
居住地:
投稿: 12
使用環境:
.3.2
Re: 二次元配列への値の設定
二重送信してしまいました。

昨日から、投稿ミスを続けて申し訳ありません。
削除してくださると、助かります。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops