• 締切済み

多次元配列はなぜ必要???

なぜ多次元配列というものが必要なのでしょうか? 長さ10の1次元配列と、2行5列の2次元配列だと、記憶できる量は同じではないですか? よく2次元配列を表に例えて「表のように使います」と説明しているサイト等がありますが、 DBと違って配列は添え字でしか管理できないんだか、表のように考えるメリットもよくわかりません。 更にもっと謎なのが3次元以上の配列の存在です。 これは実際に使っている人はいるのでしょうか・・・?

  • Java
  • 回答数4
  • ありがとう数0

みんなの回答

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.4

実行レベルでは差が無いですがソースコードを書くのは人間ですから人間が直感的に理解しやすい表現の方が誤り(バグ)が混入する危険が減ります。 3次元配列は3次元のデータを格納する以外に、2次元データを時系列に保持する場合などにも使用します。 とっさに良い例が思い浮かびませんが、オセロの升目は2次元配列ですが先読みをする場合等で次の状態、その次の状態…とやっていくと3次元配列になります。 この3次元配列を最適手を探す為に複数持てば4次元配列になります。 あまり次数を増やすと人間が見た場合に分かりにくくなるので増やしませんが、3次元配列は普通に使います。

noname#94983
noname#94983
回答No.3

例えば、ゲームを考えてみましょうか。 マップがあって、そこをキャラクタが移動していく、というようなもの。このマップのデータは、1次元配列よりも、縦横の位置による2次元配列で管理したほうが圧倒的に簡単ですね。配列[横][縦]に表示するマップの情報を保管しておけば、感覚的に理解しやすいでしょう。 そして、マップのそれぞれの位置に、アイテムや敵キャラやイベントなの各種の情報を設定したければ、3次元目を用意してここに整理しておけばわかりやすいでしょう。 まぁ、これらも1次元でやろうと思えばできますが、わかりにくいですね。デバッグで配列の要素を確認するようなときも、1次元ではどこに何があるのかわからないし。わざわざわかりにくい1次元で値を管理するより、素直に2次元や3次元で管理するのが普通でしょう? 実際に、こういう「多次元で管理するのが簡単なプログラム」を作ったことがあれば、必要性は説明せずともわかるものです。質問者さんは、まだそうしたプログラムを作る必要に迫られたことがない、というだけでしょう。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

例えばある地域の立体的な温度分布を表すとしたら三次元配列ですね。 がらりと変わって年齢、性別、住んでいる地域、職業で人口統計を取るとしたら4次元の表が必要ですね。

noname#96023
noname#96023
回答No.1

例えばエクセルの表を配列に取り込む際に、 17行15列は1元配列の何番目かすぐに答えられますか?

関連するQ&A

  • 2次元配列について、教えてください。

    基本的なことなのでしょうがまだよくわかっていません。 ワークシートにたとえると、1次元は縦方向(行番号方向)、二次元は横方向(列番号方向)ですよね? 列数、行数にあたるのが1次元、二次元それぞれの添字ですよね? そしてセルに当たるのが「要素」ですよね? 以上の解釈があっていたら、 1.A列やB列にあたるものはなんと呼ぶのでしょうか? 2.1行目や2行目にあたるのはなんと呼びますか? 3.ワークシートで行や列を削除するような感じで2次元配列の行や列にあたるものを削除することはできますか? 4.UBound関数は、配列の大きさを調べられますが、この大きさは添字です。ワークシートのCells(65536,1).End(xlUp)Rowのように実際にデータがどこまで入っているか調べられますか? 教えてください。 前提とした解釈自体が違っていたらそれもご指摘ください。

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

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

  • 二次元配列で"一列"取り出すには?

    すいませんC# を勉強中なのですが、 たとえば int[,] a = new int[2,2] {            {1,2},            {3,4}         } という2x2の二次元配列があったとき 縦の列、つまり1と3だけ抜き取って配列に格納したい、または2と4だけを抜き取って配列に格納するにはどうすればいいでしょうか? 実際には配列に抜き取った後に hairetsu.Max(); でその列の最大値を出したいと考えています。 たくさん量があるとき、どうすれば簡単に列の配列を抜きとれるのでしょうか、ご存じの方よろしくお願いします…

  • 二次元配列のインデックスについて

    基礎的な質問かもしれませんが、ネットで調べたのですが、うまく回答が見つからなかったので、教えて下さい。 VB.netで二次元配列を扱っているのですが、この要素はどこにあるのかを知りたいのです。 一次元配列でしたら、Indexof を使えば、どこのインデックスに配置されているかが分かると思うのですが、 二次元配列の場合は、どうすればインデックス数が分かるのでしょうか。 例えば、列は0で固定だけど、どこの行にこの要素が格納されているか分からないから、行番号を知りたいと言うときです。 よろしくお願いいたします。

  • 動的に多次元配列を使用したい

    動的に多次元配列を使用したい お世話になります。 adobe flash professional :ActionScript 3.0 を使用しています。 例えば、 [ア][あ] [イ][い] [ウ][う] ・ ・ ・ の、x行・2列の動的な多次元配列を使用したいのですが、 動的な多次元配列の作成の仕方を教えて頂けないでしょうか? お手数ですがよろしくお願いします。

    • ベストアンサー
    • Flash
  • 二次元配列でソートがしたい

    二次元配列でソートがしたい 二次元配列でソートがしたい 開発環境:Visual Web Developer 2008 express 言語:Visual Basic 上記開発環境でWebアプリケーションを開発中です。 TextBoxを縦20行横10列の表形式に配置し、左から2番目の列に入力された数値をキーに、昇順に並べ替えができるような入力フォームを作成していますが、参考になるようなサイトが見つからなかったので、どなたか参考になるサイトやサンプルロジックを教えて頂けないでしょうか? よろしくお願いします。

  • 多次元配列は配列の配列である

    Java勉強中なんですが、参考書を読んでいて「多次元配列は、実際には配列の配列である。つまり、2次元配列(array[][])がある場合、実際にはこれをarray[0]、array[1]、array[2]、といった1次元配列に配列として扱う事ができる。」と書いてあり、例題で、 double array[][] = new double[5][]; array[0] = new double[500]; array[0] = new double[400]; array[0] = new double[300]; array[0] = new double[200]; array[0] = new double[100]; と書いてありました。これについてのこれ以上の説明はなく、理解できなくて困っています。ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • textboxの二次元配列で質問

    textboxの二次元配列で質問 Visual Web Developer 2008を使いWebアプリケーションの入力フォームを開発中です。言語はVBです。  複数行のtextboxに入力された文字を連結する方法が分かりません。ネットでいろいろ検索して二次元配列をすれば可能なようですが、分かりやすく書いてあるサイトが見つからず、苦戦しています。列数は10列。行数は50行ぐらいあります。 ↓(サンプル)  例えば、下のような入力フォームのtextboxにあ・い・う・え・お・か・き……と入力された文字列で、buttonをクリックしたら「あいうえおかきくけこ…」と文字列の連結した実行結果を出したい場合です。       列   あ|い|う|え|お| | |   か|き|く|け|こ| | | 行 さ|し|す|せ|そ| | |   た|ち|つ|て|と| | |   な|に|ぬ|ね|の| | |    | | | | | | |    | | | | | | |    textboxが多いので、二次元配列と繰り返し処理(文字がなくなるまで繰り返す)を使って、簡単にできないでしょうか? 初心者なので分かりづらい質問で申し訳ありません。 参考になるページやコードがあったら教えて下さい。 よろしくお願いします。

  • 多次元配列の行列

    1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!

  • 2次元配列の動的確保について、アドバイス下さい

    今、大容量の2次元配列を造りたいので、 メモリの動的確保の勉強をしてました。 昔は、サイズ分mallocで確保して、配列の各行の先頭アドレスを それぞれ対応させていって、行列としてポインタを扱えるようにしてたのですが、 調べていると、もっと簡単に2次元配列のメモリを確保できるみたいなので、その方法を調べていました。 その中で、 if(!(ptr = (int (*)[RETSU])calloc(GYOU*RETSU, sizeof(int)))) こういう例題を見つけたんですけど、 これの、(*)[RETSU])のところが、理解できません。 これは何をしているのでしょうか? どういう言葉で検索すれば、説明が出てくるのか解らなかったので質問させて頂きました。 この(*)[RETSU]の感じの書き方をすると、結構簡単にメモリ確保できるみたいなので、解説、または説明サイトなど教えて頂けると助かります。 または、例題を書いていただけるとスゴク助かります。 ちなみに私が造りたいのは、 100行300000列 ほどの配列です。 是非、よろしくお願いします。

専門家に質問してみよう