• ベストアンサー

2次元リスト

2次元のリスト構造でデータを格納したいのですが、2次元目のリストを複数作らなければならくて、その分の変数名をユニークにするのが、大変なのですが、なにかいい方法はないでしょうか?

  • Java
  • 回答数6
  • ありがとう数2

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

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.4

こんな感じ?  ArrayList list1 = new ArrayList();  for (int i=0 ; i<m ; i++) {   ArrayList list2 = new ArrayList();   list1.add((Object)list2);   for (int j=0 ; j<n ; j++) {   String data = "データ" + (i+1);   list2.add((Object)data);   }  }

mikmik_a
質問者

補足

ご回答ありがとうございます。 この方法を使用した場合。 取り出すときは、 for(int i=0;i<list1.size();i++){ ArrayList array = new ArrayList(); array = list1.get(i); for(int j=0;j<array.size();j++){ System.out.println(array.get(j))+ } } といった感じで取り出せばいいのでしょうか?

その他の回答 (5)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.6

No.4の補足での質問に対する回答ですが、概ねその通りです。 ただ、arrayは ArrayList array; と宣言しておけばよく、newするのは意味がありません。

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.5

行は増減するが、列が増減しないんでしたら addするときに列数分の配列を格納すればよいと思います。 イメージとしてはこんな感じ。(3行4列) 格納するのはVectorでもArrayListでもいいです。 ArrayList{  {あ,い,う,え} …[0]番目の要素  {か,き,く,け} …[1]番目の要素  {さ,し,す,せ} …[2]番目の要素 } ArrayList table = new ArrayList(); table.add(new Object[]{"あ", "い", "う", "え"}); table.add(new Object[]{"か", "き", "く", "け"}); table.add(new Object[]{"さ", "し", "す", "せ"}); //(1,2)の要素"し"を取り出すとき Object[] row = (Object[])table.get(2); //入れた型でキャスト System.out.println(row[1]); //動的に10行2列のデータを作成する例 table = new ArrayList(); for (int r = 0; r < 10; r++){   row = new Object[2];   for (int c = 0; c < 2; c++){     row[c] = "(" + c + "," + r + ")";   }   table.add(row); } //動的に表示する例 for(int r = 0; r < table.size(); r++){   row = (Object[])table.get(r);   for (int c = 0; c < row.length; c++){     System.out.print(row[c]);   }   System.out.println(); }

  • po-net
  • ベストアンサー率36% (172/477)
回答No.3

>ArrayList list = new ArrayList(); >ArrayList list1 = new ArrayList(); >ArrayList list2 = new ArrayList(); >list1.add("データ1");4回 >list2.add("データ2");4回 >list.add(list1); >list.add(list2); こういうときには、配列ではなくてjava.util.Vectorを使います。 Vectorを使うと処理の途中で長さを変更できますので、こういうときには最適です。 なお、Vectorに関しては参考URLで検索してみてください。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html
mikmik_a
質問者

補足

Vectorを使用しても、行数分Vectorが必要だと思うのですが、他にいい方法があるのでしょうか? 例をあげていただくとありがたいです。

  • hameggs
  • ベストアンサー率38% (8/21)
回答No.2

おはようございます。 いまいち質問の意味がわかりません。 できればテストデータなどを踏まえて説明 していただければ解答できると思います。

mikmik_a
質問者

補足

たとえば、2行4列の2次元リスト構造だと、 ArrayList list = new ArrayList(); ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); list1.add("データ1");4回 list2.add("データ2");4回 list.add(list1); list.add(list2); みたいな感じで、作成すると、 行数分、ArrayListが必要で、実用的ではないので、 効率的な方法はないでしょうか?

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

2次元リスト構造って、木構造みたいなやつですか? それとも2次元配列のこと?

mikmik_a
質問者

補足

配列というか、例えば、ArrayListを2つ使ったりして、2次元のリスト構造を実現したいのですが、2次元目のListが複数必要になるので、どうしたらいいですか?

関連するQ&A

  • シートの全データを2次元のテーブルに格納したい

    シートにある全データを2次元のテーブルに格納したいです EXCEL VBA 初心者です。 シートにあるデータを一時的に同じ状態で二次元のテーブルに格納するにはどのようにしたら良いでしょうか 変数宣言から教えてください。 なお、このデータの中身は文字、数字、日付と様々で、行数も列数も随時変わります。 宜しくお願い致します。

  • アドレス格納のための二次元配列のメモリ動的確保

    アドレス格納のための二次元配列のメモリ動的確保 二次元配列のためにメモリを動的確保しなければならないのですが、 その配列に格納したいものが 「DATA型のポインタ」です。(DATA型はtypedefした構造体です。) プログラム実行中にmallocで確保した、数あるDATA型の構造体の、その先頭アドレスを リストアップするための配列です。 この場合、どのような形でmallocすればよいのでしょうか? 教えていただけるとありがたいです。よろしくお願いいたします。 -- たとえば m×n のint型の配列は、 ◆ int *i; ◆ i = (int *)malloc( m * n * sizeof(int) ); となりますよね。 この要領がでやるのが一般的にわかりやすいものだとするならその方法でやりたい (後発の人が自分のソースコードを読む可能性があるため)のです。 -- 同様にm×nの「DATA型のポインタを格納するための二次元配列」を動的確保したい場合、 ◆ DATA *d; ◆ d = (DATA *)malloc( m * n * sizeof(DATA) ); この文にどのように付け加えたら良いのでしょう? もうあと一歩な気がするのですが(笑)。しかし参考書等で勉強しましたがわかりませんでした・・・。 わかる方、どなたかよろしくお願いいたしますm(_ _)m あとこれだけ通ればコンパイルが通るんです!!!!! たぶん(笑)

  • 次元とは何ですか?

    質問1:次元の定義が、はてなキーワードというサイトで、「ある独立変数の個数を指す。」と書いてありました。 この定義は、具体化するとどのようなものになりますか?小中学生でもわかるように且つ厳密で本質的に説明してください。 質問2:、「ある独立変数の個数を指す。」とは、例えば、縦と横と高さのある図形では、「縦,横,高さ」という三つの独立した変数があり、これは上記の定義により、3次元ということでしょうか? 質問3:時間とは1次元であるようですが、それは何故ですか?例えば12:30分であれば、「12」と「30」という2つの数字があるので、2次元であると思うんです。それとも、時間を分数で表すと変数は1つで充分だから、1次元ということになるのでしょうか?

  • 多次元map

    C++です。 1. 多次元mapというのはどのように実装すればよいのでしょうか?たとえば、 data[0.1][3.9]=1 といったデータの取り扱いです。 2. 1.が無理なのであれば、mapで格納されているデータ(たとえばdata[3.9]=1)を vectorに格納するにはどのようにしたらよいのでしょうか?

  • LIST型に格納されている値を1つずつ取り出して処理をしたい

    LIST型に格納されている値を1つずつ取り出して処理を行う方法を探しています。 Dim a As List(Of Integer) 具体的には、1・2・3・4・5という数字が格納されているaという変数から格納された値を一つずつ取り出して、足し合わせていくループ処理を書きたいと思っています。15という結果が出せればOKです。 どなたかご助言いただけると助かります。

  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • 二次元配列が、勝手に一次元配列になってしまう

    Excelのマクロで、二次元配列を格納したバリアント型を戻り値とする関数を作ったのですが、… 二次元型配列のひとつの要素数が1の時、受け取ったバリアント型変数は、一次元配列になっています。 列ベクトルなら、それもありかな~と思うのですが、なんで、行ベクトルまで、一次元配列にするんだよ~って、困っています。 シートから関数を呼んだ場合は、列ベクトルは列ベクトル、行ベクトルは行ベクトルとして、表示されるので、マクロの中で関数を呼び出した場合も、行列の情報を保持できる方法があるんじゃないかと思ったのですが。 どなたか、ご教示頂けるとありがたいです。 よろしくお願いします。

  • C#で、引数における一次元と二次元配列の取り扱い

    C#について質問させていただきます。 以下のようにすればそれぞれ一次元配列と二次元配列を格納出来ますが 同時に一つの引数に収めることは無理なのでしょうか?    public static void Join(string[] Ary_str){ 本文 }    public static void Join(string[ , ] Ary_str){ 本文 } そのために、例えば以下のようにしたとします。    public static void Join(object Ary_obj){ 本文 } こうすれば一次元でも二次元でも格納出来ますが 格納された値が何次元配列なのか確認するために    Ary_obj.Rank としてもエラーになってしまいます。 (1)Objectに格納した値が何次元配列なのか確認する方法か (2)一次元でも二次元でも格納できる引数の指定方法 をご存じの方、ぜひお教え願います。><

  • PHP 二次元配列から値を抜き出したい

    PHP 二次元配列から値を抜き出したい こんにちは。 PHP初心者です。(PHP5使用) ある二次元配列から値を抜き出したいのですが、方法を教えていただけないでしょうか? 文字列: "TransactionId=000000020513&TransactionDate=20101029&OperateId=1Auth&MerchantFree1=20101029000001&ResponseCd=G65" この文字列から、 $pattern="/(TransactionId|TransactionDate|OperateId|MerchantFree1|ProcessId|ProcessPass|ResponseCd|CompanyCd|ApproveNo)=(.+?)(?:&|$)/"; preg_match_all($pattern,$response_list,$match); print "<pre>"; print_r($match); print "</pre>"; で$match変数に以下のように値が、 $match[0][0]・・・TransactionId=000000020513& $match[0][1]・・・TransactionDate=20101029& ・ ・ $match[1][0]・・・TransactionId $match[1][1]・・・TransactionDate ・ ・ $match[2][0]・・・000000020513 $match[2][1]・・・20101029 ・ ・ という二次元配列に格納されます。 そこで、 $match[1][0]・・・TransactionId と $match[2][0]・・・000000020513 を関連付けて、 "TransactionId" という文字列をそのまま変数名「$TransactionId」として、 $TransactionId = "000000020513" という形で格納していきたいのです。(文字列にある項目全て同じ形にしたいです。) 元の文字列の並びが変化したり、ケースによって作られない項目もあるので、 知っている知識だけではどうしたら良いのか困っています。 ご教授の程、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 3次元配列から2次元配列への代入

    C言語初心者です。 詳しい方、宜しくお願い致します。 下記のような三次元配列(Sanjigen[2][5][5])があります。 ダンプしたもので見難くてすみません。 00FFBCBC [0][0][0] 01 02 03 04 05 00FFBCC1 [0][1][0] 06 07 08 09 10 00FFBCC6 [0][2][0] 11 12 13 14 15 00FFBCCB [0][3][0] 16 17 18 19 20 00FFBCD0 [0][4][0] 21 22 23 24 25 00FFBCE4 [1][0][0] 26 27 28 29 30 00FFBCE9 [1][1][0] 31 32 33 34 35 00FFBCEE [1][2][0] 36 37 38 39 40 00FFBCF3 [1][3][0] 41 42 43 44 45 00FFBCF8 [1][4][0] 46 47 48 49 50 このデータ(Sanjigen[2][5][5])を、二次元配列にしまう方法をご教授ください。 Nijigen1[5][5]には三次元配列のデータ(1~25)と(26~50)をアンドしたデータを格納します。 Nijigen2[5][5]には三次元配列のデータ(1~25)と(26~50)をオアしたデータを格納します。 下記は自分の作ったプログラムですが、うまくいきません。 char Sanjigen[2][5][5]; char Nijigen1[5][5]; char Nijigen2[5][5]; void get_data( void ) { char i; for( i=0; i<8; ++i ){ Nijigen1[i] = Sanjigen[0][i] & Sanjigen[1][i]; Nijigen2[i] = Sanjigen[0][i] ^ Sanjigen[1][i]; } } 説明わかりにくくて申し訳ありません。 宜しくお願い致します。

専門家に質問してみよう