搜尋

首頁  >  問答  >  主體

Ruby中二維數組插入元素的問題

我想在某一個數組中插入元素,代碼如下:

foo = Array.new(10,[])
foo[0] << 1
puts foo.to_s

輸出的結果是

[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

這是為什麼啊?

如果是哈希的話

bar = Hash.new([])
bar[0] << 1
puts bar.to_s
puts bar[1].to_s

輸出的結果是

{}
[1]

更加摸不著頭腦了……求指教……

天蓬老师天蓬老师2853 天前792

全部回覆(3)我來回復

  • ringa_lee

    ringa_lee2017-04-21 11:20:00

    foo = Array.new(10,[])
    

    這個方法所建立的10個空數組是同一個Object

    如果想要建立不同Object的話,請使用以下方法。

    foo = Array.new(10) { Array.new }
    

    參考: http://ruby-doc.org/core-2.0.0/Array.html#label-Creating+Arrays

    回覆
    0
  • 迷茫

    迷茫2017-04-21 11:20:00

    補樓上, 所有object_id是一樣的
    foo.map(&:object_id)
    => [9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 929880, 929880, 9929880, 9929880]

    ]

    回覆
    0
  • 怪我咯

    怪我咯2017-04-21 11:20:00

    我通常都是用map.
    (1..10).map {[]}

    不過我還是疑問,為什麼還是同一個 Array 呢?

    回覆
    0
  • 取消回覆