55744


空の2次元配列`buff`に対して2つの配列の結合を`.concat`で下記のように行いたいです．  
例：

[code]

    # 配列[1, 2, 3, 4]と配列[10, 11, 12, 13]を結合
    buff[0] = [1, 2, 3, 4]
    buff[1] = [10, 11, 12, 13]
    
[/code]

しかし，下記のコードでは`buff`のオブジェクトIDが同じが原因なのかどうなのかがわからず，期待した結合ができません．  
方法をご教授お願いします．

[code]

    buff = Array.new(2, [])
    p buff
    
    buff[0].concat([1, 2, 3, 4])
    p buff
    
    buff[1].concat([10, 11, 12, 13])
    p buff
    
[/code]


CC BY-SA 4.0
2019-06-13T05:00:36.067
55742
2019-06-13T05:22:11.327
2019-06-13T05:22:11.327
19110
30173
question
ruby
空の2次元配列の結合を.concatで意図した結合ができない


原因についてはお察しの通りbuff[0]とbuff[1]が同じオブジェクトを指してるからです。  
解決法としては

[code]

    buff = Array.new(2){[]}
    
[/code]

という風に初期値をブロックで渡すこと  
もしくは

[code]

    buff[0] += [1, 2, 3, 4]
    buff[1] += [10, 11, 12, 13]
    
[/code]

という風に破壊的でないメソッドで配列を結合すること  
いずれかを使うのが典型的なやり方でしょう


CC BY-SA 4.0
2019-06-13T05:21:45.133
55744
2019-06-13T05:21:45.133
33033
55742
answer