###前提・実現したいこと
Array.newと[]を使って配列を作る方法で、メソッドの結果が異なるのか知りたい。
###発生している問題・エラーメッセージ
私の勘違いの可能性が高い。
Array.newで作った二次元配列と[]で作った
二次元配列で若干結果が異なる場合がある?
これは仕様なのでしょうか?
###該当のソースコード
Ruby
1# encoding: utf-8 2 3array1 = Array.new(3, []) 4p array1 # => [[], [], []] 5 6# array1[0] = [1] # => [[1], [], []] 7# array1[0].concat([1]) # => [[1], [1], [1]] 8# array1[0] << 1 # => [[1], [1], [1]] 9array1[0].unshift(1) # => [[1], [1], [1]] 10 11p array1 12 13array2 = [[], [], []] 14p array2 # => [[], [], []] 15 16# array2[0] = [1] # => [[1], [], []] 17# array2[0].concat([1]) # => [[1], [], []] 18# array2[0] << 1 # => [[1], [], []] 19array2[0].unshift(1) # => [[1], [], []] 20 21p array2 22
###試したこと
調査中。
###補足情報(言語/FW/ツール等のバージョンなど)
ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32]
Windows10
#追記
この件について書かれたページ
Array.newで多重配列を作るときはブロックを使わないと
おかしくなるということでした。
こちらのページのコメント欄でArray.new(3){[]}以外の方法が紹介されていました。
それを利用して書くと
Ruby
1array = 3.times.map{[]}
という感じになります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/15 07:51
2017/07/15 07:52
退会済みユーザー
2017/07/15 07:54 編集