Forum: Italian Ruby user group Multidimensional hash

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Lucea (Guest)
on 2007-07-04 19:54
(Received via mailing list)
Salve a tutti :)

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 :) ).
Qualcuno sa aiutarmi?
Grazie!
Chiaro S. (Guest)
on 2007-07-04 20:01
(Received via mailing list)
On 7/4/07, Lucea <removed_email_address@domain.invalid> wrote:
>
> Salve a tutti :)
>
> 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 :) ).
> Qualcuno sa aiutarmi?


prova a scrivere un esempio di come lo vorresti usare e che risultati ti
aspetteresti.
Lucea (Guest)
on 2007-07-04 20:09
(Received via mailing list)
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"
Antonio C. (Guest)
on 2007-07-04 20:16
(Received via mailing list)
hsh = {:str_a1 => {:str_b1 => rec1}}
hsh[:str_a1][:str_b1].campo1 #=> "aaa"
hsh[:str_a1][:str_b1].campo2 #=> "bbb"

Ciao,
Antonio
Lucea (Guest)
on 2007-07-04 20:19
(Received via mailing list)
Grazie mille! Sempre velocissimi. :)
Silvia
gabriele renzi (Guest)
on 2007-07-04 21:10
(Received via mailing list)
--- Lucea <removed_email_address@domain.invalid> wrote:

> Grazie mille! Sempre velocissimi. :)
> 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@(irb):4>
>> 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
This topic is locked and can not be replied to.