C#での動的配列作成方法について

このQ&Aのポイント
  • C#で二次元配列を動的に作成する方法とデータの格納・表示方法を教えてください。
  • ASP.NET、C#で開発をしていますが、動的なサイズ変更が可能な二次元配列の作成方法を教えてください。
  • C#でのデータの格納と表示について教えてください。二次元配列を使用する場合とArrayListを使用する場合での違いも知りたいです。
回答を見る
  • ベストアンサー

C#での動的配列作成方法について

はじめまして、 現在ASP.NET、C#で開発をしております。 そこで、質問です。 C#で二次元配列を作成し、データを格納します。 二次元配列は宣言時はサイズがわかってません。 ループで回った回数分、最初(第一要素数)の要素数が決定します。 二つ目の要素数の数は最初からきまっています(固定用素数)。 string[][] string[,] arraylist などがあると思いますが、上記の場合どういう風に配列を作成していったらいいのでしょうか? 動的にサイズを変更できる配列の作り方、データ格納方法、データ表示方法を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

//例えば、こんな感じ using System; using System.Collections; public class SamplesArrayList { public static void Main() { ArrayList aArrayList = new ArrayList(); for(int i=0;i<10;i++){ aArrayList.Add(new int[5]); // ArrayListへの追加(intに限らない) for(int j=0;j<5;j++){ ((int[])aArrayList[i])[j]=i+j;// 値のセット } } // 表示 Console.WriteLine( "aArrayList" ); Console.Write( "データ数:{0}\n", aArrayList.Count ); for(int i=0;i<aArrayList.Count;i++){ Console.Write( "\nデータ[{0}]:\n\t",i); for(int j=0;j<5;j++){ Console.Write("[{0}]", ((int[])aArrayList[i])[j] ); } } } } ArrayListを使うことで動的な配列を作成できます。 サンプルでは、回数が決まっていますが、回数のループが決まっていない時にも、使えるのは明白です。 ArrayListには、addメソッドを使ってオブジェクトという形でなんでも格納できます(サンプルではintの配列)アクセスには、[]が使えます。詳しくは、ヘルプを参照して下さい。

ora_ora
質問者

お礼

お返事遅くなってすみません。 ありがとうございます! そういうやり方でやったらいいのですね 参考になりました!

関連するQ&A

  • 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」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • C++ vectorに配列をプッシュしたい

    C++のstd::vectorが格納する要素として配列を指定することはできますか vectorを使って2次元配列を表現したいときは,たとえば std::vecor<std::vector<int>> v; とすれば2次元配列が表現できますよね. 2次元配列の列方向の要素数が2で固定されていて,行方向の要素数が不確定のデータを扱いたいので,2次元配列を格納するvectorで扱えればなと思いました. (2個で1組のデータがたくさんあるということなので,vectorの2次元配列ではありません) std::vector<int[2]> v; int a[2]; a[1] = 1; a[0] = 2; v.push_back(a); という書き方ではコンパイルできなかったのですが,vectorに配列要素を格納させることはできないのでしょうか. あるいは,もし可能ならどのように書けばよいのでしょうか. 結局は1組のデータセットを構造体化してそれをvectorにプッシュするやり方に落ち着いたのですが,疑問に思ったままモヤモヤしているので質問させて頂きます. 「vector 配列」などのキーワードで検索してみましたが,vectorの動的配列としての紹介記事が多くヒットしてしまい,自分ではうまく情報を発見することはできませんでした. よろしくお願いします.

  • C#で、ファイルのデータを取得し、配列に格納

    C#を始めたばかりで分からないことも多いため、質問させていただきます。 C#で、テキストファイルにある2進数の数値 例: 00111100 11111100 00010100 のような8桁のデータをC#でテキストファイルから2進数のまま読み取り、 配列に格納したいです。 上の例で考えると、 byte[0]に 00111100 byte[1]に 11111100 byte[2]に 00010100  のデータが入力されているような感じです。 ArrayListを使用する方法や、 バイナリファイルで読み込む方法などもあると思うのですが、 データを1行ごとに配列に入力し、 それを見た目どおり2進数として格納する方法が分かりません。 やはり、文字コードなどを参考に、 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)一次元でも二次元でも格納できる引数の指定方法 をご存じの方、ぜひお教え願います。><

  • JavaScript で配列の終わりまでループ

    JavaScript で配列の終わりまでループを回すには どうしたらいいのでしょう? perl であれば foreach (@test) {  処理 } ですよね。。。test.length; で要素数を取得する以外で 方法はないでしょうか。 new Array を使って、2次元配列(のようなもの) を 作って格納してしまったので、test[0][*], test[1][*] それぞれの要素数を調べたいのです。 現状だと test[0][*], test[1][*] 2つの合計値が 返ってしまいます。

  • 配列の宣言の仕方

    vs2005を使用しています。 配列の宣言の方法はいくつかあるようですが 違いが分かりません。 Dim strDate() As String = New String(1) {} Dim strDate() As String = New String(1) {"",""} Dim strDate As String() = {"", ""} Dim strDate (1) As String Dim strDate As New ArrayList も候補のひとつですが、この違いは分かります。 やりたいことは、要素数2の配列を""で初期化したいというものです。 そしてその配列を返す関数を作成しています。 どれも同じように思うのですが、違いがあれば教えていただきたいと思います。 よろしくお願いします。 でもかまわないのですが、

  • 配列のbindValue方法について

    <環境> サーバーOS:CentOS webサーバー:apache データベース:MySQL PHP5.2 現在、上記の環境でwebアプリを作成しています。 データベースにデータを登録する際にPDOを使用しているのですが、 二次元配列に格納されているデータを bindValue() できずに困っています。 データが多く、個数もその都度変化するので、二次元配列に格納しています。 簡易的ではありますが、以下のようなソースコードになります。 <ソースコード> $dataArray → データが格納されている二次元配列 $columns = array(':id', ':name'); → プレイスホルダー名を格納している配列 for($i = 0; $i < count($dataArray); $i++) { $stt = $dataBase -> prepare('insert into tb_test(id, name) values(:id, :name)'); for($j = 0; $j < count($dataArray[ i ]); $j++) { $stt -> bindValue($columns[ $j ] ,$dataArray[ $i ][ $j ]); } $stt -> execute(); } 二次元配列の1行分のデータをループで bindValue() してから execute() で実行しています。 これを二次元配列の行数回繰り返しています。 apacheのエラーログには特に何も表示されていませんが、 登録処理ができません。 このような forループ では実行できないのでしょうか?

    • 締切済み
    • PHP
  • DB接続 二次元配列 指定表示

    DB接続でデータを取得したいとおもっています 今DBで3×10のデータがはいっており、... DB接続でデータを取得したいとおもっています 今DBで3×10のデータがはいっており、取得、二次元配列に返してあげている状態です この例だと3列(TESTNO、KANA、NAME)だと取得できるのですが TESTNO,KANA の二列取得をしたときにエラーが発生してしまいます どのように改善すればエラーが発生せず、取得できるようになりますか? それともこのロジック自体がまずいのでしょうか? アドバイスお願いします ソース一部 public String[][] selectExec(String sql) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用ののArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //KAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 while(aa.next()){ //Resultsetが最終行になるまで実行 TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ //オブジェクトの解放 return hairetu(TESTNO,NAME,KANA); } public String[][] hairetu(ArrayList T,ArrayList N ,ArrayList K){ String[][]all=new String[3][T.size()]; all[0] = (String[])T.toArray(new String[0]);//配列TSETNOに収納 all[1] = (String[])N.toArray(new String[0]);//配列NAMEに収納 all[2] = (String[])K.toArray(new String[0]);//配列KANAに収納 return all; よろしくお願いします

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の作成について

    ArrayListで可変長配列を扱っているのですが、 2次元可変長配列を用いる必要が出てきたので、 下記のように変更したのですがうまくいきません。 何が悪いのか教えていただけませんでしょうか? ----------------------------------------- ArrayList cars=new ArrayList(); cars.add("フェラーリ"); cars.add("ポルシェ"); cars.add("メルセデスベンツ"); for(int i=0;i<cars.size();i++){  String str=(String)cars.get(i);  System.out.println(str);} ----------------------------------------- 上記から下記のように変更しました。 ----------------------------------------- ArrayList[] cars=new ArrayList[3]; cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){  String str=(String)cars[0].get(i);  System.out.println(str);} ----------------------------------------- エラーは「Exception in thread "main" java.lang.NullPointerException」です。 どうやら初期配列が10ではなく3となってしまっているようです。

    • ベストアンサー
    • Java
  • DataGridViewに配列の値を表示したい

    VB2008でプログラミングをしています。(超初心者です) タイトルどおり、DataGridViewに一次元配列の値を表示したいと思っています。 最初は、以下のとおりにプログラムを書いてみたのですが、 表示されるのは各要素の長さでした。 dim array() as string = {"data1","data2","data3"} DataGridView1.DataSource = array どのようにすれば、要素の値が表示されるのでしょうか? 出来れば{"data1","data2","data3"}のように、 各要素を書き出さない方法が知りたいです。 (要素数が不確定のため) よろしくお願いいたします。

専門家に質問してみよう