[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

memory and storing references to data structures

Chaozz

9/25/2003 6:22:00 PM

I want to hold data from structures in another array, modify the external
structures so that the array still refelects the changes: I've done as
shown underneath but am i storing a 'reference' in the c/c++sense or am I
duplicating data in the 'stuff' object? I dont wont to excessive memory
usage.

def main
stuff=Hash::new()
a1=['a','b','c']
b1=['a','d','f']
ll=nil

['a','b','c','d','e','f'].each {|i|
stuff[i]=Array::new()
}

stuff['a'].push(a1)
stuff['a'].push(b1)
puts "#{stuff['a']}"
a1[0]='foo'
puts "#{stuff['a']}"
end

main
2 Answers

Joel VanderWerf

9/25/2003 9:06:00 PM

0

sdv wrote:
> I want to hold data from structures in another array, modify the external
> structures so that the array still refelects the changes: I''ve done as
> shown underneath but am i storing a ''reference'' in the c/c++sense or am I
> duplicating data in the ''stuff'' object? I dont wont to excessive memory
> usage.
>
> def main
> stuff=Hash::new()
> a1=[''a'',''b'',''c'']
> b1=[''a'',''d'',''f'']
> ll=nil
>
> [''a'',''b'',''c'',''d'',''e'',''f''].each {|i|
> stuff[i]=Array::new()
> }
>
> stuff[''a''].push(a1)
> stuff[''a''].push(b1)
> puts "#{stuff[''a'']}"
> a1[0]=''foo''
> puts "#{stuff[''a'']}"
> end

stuff[''a''][0] << "added to stuff[''a''][0]"

p a1 # ==> ["foo", "b", "c", "added to stuff[''a''][0]"]

> main

So I think you would call it a reference. Does that help?


daz

9/26/2003 6:04:00 AM

0


"sdv" <foo@bar.com> wrote

> I want to hold data from structures in another array, modify the external
> structures so that the array still refelects the changes: I''ve done as
> shown underneath but am i storing a ''reference'' in the c/c++sense or am I
> duplicating data in the ''stuff'' object? I dont wont to excessive memory
> usage.
>
> def main
> stuff=Hash::new()
> a1=[''a'',''b'',''c'']
> b1=[''a'',''d'',''f'']
> ll=nil
>
> [''a'',''b'',''c'',''d'',''e'',''f''].each {|i|
> stuff[i]=Array::new()
> }
>
> stuff[''a''].push(a1)
> stuff[''a''].push(b1)
> puts "#{stuff[''a'']}"
> a1[0]=''foo''
> puts "#{stuff[''a'']}"
> end
>
> main


stuff=Hash[]

a1=[''a'',''b'',''c'']
b1=[''a'',''d'',''f'']

[''a'',''b'',''c'',''d'',''e'',''f''].each {|i|
stuff[i]=Array::new()
}

stuff[''a''].push(a1)
stuff[''a''].push(b1)
p stuff[''a'']
a1[0]=''foo''
p stuff[''a'']

a1.size.times do |ix|
p [ a1[ix], stuff[''a''][0][ix] ]
puts ''OK'' if a1[ix].object_id == stuff[''a''][0][ix].object_id
end


#-> [["a", "b", "c"], ["a", "d", "f"]]
#-> [["foo", "b", "c"], ["a", "d", "f"]]
#-> ["foo", "foo"]
#-> OK
#-> ["b", "b"]
#-> OK
#-> ["c", "c"]
#-> OK


Comparing object_id shows whether or not you''re referring to
the same objects.
In your example, you are.


daz