The question is simple. What way would you create an array that
contains 5 copies of an array, without the copies interfering with each
other?
array = [1,2,3]*5
generates:
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
but unfortunately also makes 'array[1][1] = "a"' change it like this:
[[1,"a",3],[1,"a",3],[1,"a",3],[1,"a",3],[1,"a",3]]
---------
Anyway, found a solution during tinkering, although I don't know why.
Thought I'd just still post it anyway.
ar = []
5.times{ar << [1,2,3]}
works, and 'array[1][1] = "a"' results in the thing I want
[[1,2,3],[1,"a",3],[1,2,3],[1,2,3],[1,2,3]]
For me [1,2,3]*5 behaves different.
irb(main):001:0> [1,2,3]*5
=> [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
For what you want you could use:
irb(main):002:0> a = Array.new(5) { [1,2,3] }
=> [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
irb(main):003:0> a[1][1] = 'a'
=> "a"
irb(main):004:0> a
=> [[1, 2, 3], [1, "a", 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
$ ruby -v
ruby 1.8.2 (2005-04-11) [i386-linux]
Which version of ruby are you using?
best regards,
Brian Schröder
--
http://ruby.brian-schroeder.de/
Stringed instrument chords: http://chordlist.brian-schroeder.de/
array = Array.new(5) { [1,2,3] }
--
Florian Frank
He prolly meant [[1, 2, 3]]*5
--
Premshree Pillai