質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

302閲覧

2次元配列 インスタンス化

t.s_k

総合スコア61

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/10/16 23:23

編集2018/10/16 23:38

(座標x、y方向に存在する物体を判定するプログラムを組んでいるのですが)

インスタンス化する時に以下のように3つのインスタンスを定めると、以下で言う i1 i2 の数値が大きくなるとundefined method `[]' for nil:NilClassとなりバグってしまいます。

(具体的には、全く同じ処理を i1=3,i2 = 0 でできてたのが、 i1 = 4、i2 = 0 になると
puts("@hw_ary[@hi+ci1][@wi] :: #{@hw_ary[@hi+ci1][@wi]}")ですらundefined method `[]' for nil:NilClassとエラーを起こしてしまいます。)

そこで質問なのですが、2次元配列hw_ary[hi][wi]をインスタンス化し(hi,wiは変数です)、以下のように変数を扱う際にはどのように定めるべきでしょうか?

def @hw_ary[@hi+i1(変数)][@wi+i2(変数)] .. 処理 処理 end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Rubyには2次元配列は存在せず、存在するのは配列の配列だけです。

つまり、2次元目の配列も、きちんと作成しないといけない、ということです。

ただ、必要なら一括して生成することはできます。

ruby

1@hw_array=Array.new(100) { [] }

…というより、もとの@hw_arrayの定義が書かれていないようですが。

投稿2018/10/16 23:40

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

動的に配列を追加したいなら追加することも可能です。

irb(main):001:0> a = [] => [] irb(main):002:0> a[0] = [] => [] irb(main):003:0> a => [[]] irb(main):004:0> a[2] = [] => [] irb(main):005:0> a => [[], nil, []] irb(main):006:0> a[3] = [] unless a[3] => [] irb(main):007:0> a => [[], nil, [], []]

上記のように、まだ長さが十分でないindexでも間を nil で埋めて作ってくれます。

投稿2018/10/17 02:21

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問