Modifying data in an array using a reference

Ok so my situation is as follows. I have an array "foo", which contains
several instances of the class "bar". I get a copy of an object inside
of "foo" using foo.detect, and then modify that copy. Afterwards, I
need to replace the original inside the array with the modified version.
The problem is that I do not know the index of the object. How would I
go about doing that? I could use some help =)

···

--
Posted via http://www.ruby-forum.com/.

Just find the index of the object. For instance, if you're iterating the
array with .each like:
arr.each do |e|
  modified = modify(e)
end

You could do something like this:

arr.each_with_index do |e, i|
  arr[i] = modify(e)
end

Alex

···

On Thu, Jun 18, 2009 at 2:38 PM, Ch Ba <navouri@gmail.com> wrote:

Ok so my situation is as follows. I have an array "foo", which contains
several instances of the class "bar". I get a copy of an object inside
of "foo" using foo.detect, and then modify that copy. Afterwards, I
need to replace the original inside the array with the modified version.
The problem is that I do not know the index of the object. How would I
go about doing that? I could use some help =)
--
Posted via http://www.ruby-forum.com/\.

Ch Ba wrote:

Ok so my situation is as follows. I have an array "foo", which contains
several instances of the class "bar". I get a copy of an object inside
of "foo" using foo.detect, and then modify that copy. Afterwards, I
need to replace the original inside the array with the modified version.
The problem is that I do not know the index of the object. How would I
go about doing that? I could use some help =)

You're working with the original foo, not a copy, so you don't need to replace the entry at a certain index:

   class Bar
     attr_accessor :x
     def initialize x
       @x = x
     end
   end

   foo = [Bar.new(0), Bar.new(1)]
   p foo

   bar = foo.detect {|bar| bar.x > 0}
   bar.x = "changed"
   p foo

[#<Bar:0xb796c988 @x=0>, #<Bar:0xb796c974 @x=1>]
[#<Bar:0xb796c988 @x=0>, #<Bar:0xb796c974 @x="changed">]

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Joel VanderWerf wrote:

Ch Ba wrote:

Ok so my situation is as follows. I have an array "foo", which contains
several instances of the class "bar". I get a copy of an object inside
of "foo" using foo.detect, and then modify that copy. Afterwards, I
need to replace the original inside the array with the modified version.
The problem is that I do not know the index of the object. How would I
go about doing that? I could use some help =)

You're working with the original foo, not a copy, so you don't need to
replace the entry at a certain index:

   class Bar
     attr_accessor :x
     def initialize x
       @x = x
     end
   end

   foo = [Bar.new(0), Bar.new(1)]
   p foo

   bar = foo.detect {|bar| bar.x > 0}
   bar.x = "changed"
   p foo

[#<Bar:0xb796c988 @x=0>, #<Bar:0xb796c974 @x=1>]
[#<Bar:0xb796c988 @x=0>, #<Bar:0xb796c974 @x="changed">]

Thank you very much for the quick answers. I realized what I was doing
wrong and was in the process of fixing it when I remembered I should
remove my post. The issue was a mistake in the initialization of the
class and had nothing to do with accessing the array. I was really
confused about why it didn't seem to be modifying the original.

···

--
Posted via http://www.ruby-forum.com/\.