Edited at

2次元配列の初期化、Ruby、JavaScript


2次元配列とは

2次元配列に入る前に・・・

1次元配列とは、普通の配列のことで、 1 方向(横) のみの配列です。(ex. array = [1, 2, 3, 4])

2次元配列とは、2 方向(縦横)の配列です。

理系出身の方や数学が得意な方は、行列を想像していただければわかりやすいです。

文系出身で数学が苦手な方は、エクセルをイメージしてください。


example

下の array は 3 × 4 の2次元配列です。

array =

["A", "B", "C", "D"]

["E", "F", "G", "H"]

["I", "J", "K", "L"]

array[0][0] → "A"

array[3][2] → "J"


Rubyの2次元配列


file.rb

# 3 × 4 の2次元配列

a = 3.times.map{Array.new(4){ '' }}

# H × W の2次元配列 (HとWに数字を代入すると使えます。)
a = H.times.map{ Array.new(W){ '' } }

# NG例 : a = H.times.map{ Array.new(W, '') }
# → 全ての要素が同じ文字列オブジェクトになってしまうので,
# 1つの要素を書き換えると他の要素も一緒に書き換わってしまいます。



JavaScriptの2次元配列


main.js

// 3 × 4 の2次元配列

var a = (new Array(3)).fill("").map(() => (new Array(4)).fill(""));

// H × W の2次元配列 (HとWに数字を代入すると使えます。)
var a = (new Array(H)).fill("").map(() => (new Array(W)).fill(""));

// NG例 : var a = (new Array(3)).fill((new Array(4)).fill(0));
// → 全ての要素が同じ文字列オブジェクトになってしまうので,
// 1つの要素を書き換えると他の要素も一緒に書き換わってしまいます。



まとめ

RubyとJavaScript以外でも新たに学ぶことがあれば、どんどん追加していきます。


追記

butchi_y様、scivola様のご指摘により、ブロックを使って初期化しないと同じ文字列オブジェクトができていしまうことが分かりました。

自分が分かったつもりのことでもブログを使ってまとめることで、分かっていない詳細についても教えていただけて勉強になりました。


参考

[リンク]https://qiita.com/r_fukuma/items/989b178a92bebb305386

[リンク]http://www9.plala.or.jp/sgwr-t/c/sec09.html

[リンク]https://qiita.com/butchi_y/items/db3078dced4592872a9c