Multidimensional hash


#1

Salve a tutti :slight_smile:

Mi pare di aver capito che non esistono hash a più dimensioni in ruby,
quindi chiedevo a voi se sapreste dirmi come gestire la cosa…
Ho provato a cercare qualcosa di già pronto ma le soluzioni che ho trovato
non funzionano (ma può anche essere che io le usi male :slight_smile: ).
Qualcuno sa aiutarmi?
Grazie!


#2

On 7/4/07, Lucea removed_email_address@domain.invalid wrote:

Salve a tutti :slight_smile:

Mi pare di aver capito che non esistono hash a più dimensioni in ruby,
quindi chiedevo a voi se sapreste dirmi come gestire la cosa…
Ho provato a cercare qualcosa di già pronto ma le soluzioni che ho trovato
non funzionano (ma può anche essere che io le usi male :slight_smile: ).
Qualcuno sa aiutarmi?

prova a scrivere un esempio di come lo vorresti usare e che risultati ti
aspetteresti.


#3

Se definisco:

rec1.campo1= “aaa”
rec1.campo2= “bbb”

hsh[str_a1][str_b1] = rec1
hsh[str_a1][str_b2] = 2
hsh[str_a2][str_b1] = …

Ottengo:

p hsh[str_a1][str_b2] # =>2
p hsh[str_a1][str_b1].campo1 # =>“aaa”
p hsh[str_a1][str_b1].campo2 # =>“bbb”


#4

Grazie mille! Sempre velocissimi. :slight_smile:
Silvia


#5

hsh = {:str_a1 => {:str_b1 => rec1}}
hsh[:str_a1][:str_b1].campo1 #=> “aaa”
hsh[:str_a1][:str_b1].campo2 #=> “bbb”

Ciao,
Antonio


#6

— Lucea removed_email_address@domain.invalid wrote:

Grazie mille! Sempre velocissimi. :slight_smile:
Silvia

tanto perché rimanga negli archivi: puoi anche fare un
Hash che sia di default n-dimensionale, col vantaggio
(o svantaggio a seconda dei casi) che non ti becchi
eccezioni di tipo NoMethodError:

usual = {:a=> {:b=>1}}
=> {:a=>{:b=>1}}

usual[:a][:b]
=> 1

usual[:b][:b]
NoMethodError: undefined method `[]’ for nil:NilClass
from (irb):3

hash_builder = proc { |h,k| h[k] =
Hash.new(&hash_builder) }
=> #Proc:0x02e13758@:4(irb)

magic = Hash.new(&hash_builder)
=> {}

magic[:a][:b]
=> {}

magic[:a][:b]=10
=> 10

magic[:b][:b][:c][:d] = 10
=> 10

magic
=> {:a=>{:b=>10}, :b=>{:b=>{:c=>{:d=>10}}}}

more info sul wiki:
http://ruby-it.org/pages/Hash+Infinito


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info


Inbox full of unwanted email? Get leading protection and 1GB storage
with All New Yahoo! Mail. http://uk.docs.yahoo.com/nowyoucan.html