Generare condizioni di uguaglianza in un blocco

Vorrei generare delle condizioni di uguaglianza in base ad un hash in
modo che vengano passate ad un blocco.

Ecco un esempio pratico usando Ruport:

table = Ruport::Data::Table.new :column_names => [:year, :month,
:value]
table << [2009, 12, 4.678]
table << [2010, 1, 3.50987]
table << [2009, 11, 1.11]

Per generare una subtable in base a condizioni di uguaglianza passate
nel blocco faccio cosi’:
table.sub_table{|r| r[:year]==2009 && r[:month]==11}

Vorrei tuttavia rendere la cosa parametrica: le condizioni di
uguaglianza vengono passate sottoforma di hash:
options = {:year => 2009, :month => 11}

Soluzione non corretta:
table.sub_table{|r| options.each{|k, v| r[k]==v}}

Scambiare i cicli each, ovvero inserendo “table.sub_table” all’interno
di un ciclo sugli elementi della hash fornisce il risultato corretto, ma
non e’ la soluzione che desidero.
Come si puo’ fare?

Grazie per il tempo,
ciao,
i.

Ciao Iwan,

non sono sicuro di aver capito bene cosa vuoi ottenere, ma pu darsi che
http://www.ruby-doc.org/core/classes/Enumerable.html#M001499
ti porti vicino alla soluzione.

Per esempio potresti usare:

table.sub_table { |r| options.all? { |k, v| r[k] == v } }

all? restituisce true solo se il risultato del blocco true per tutti
gli elementi della hash.

Ciao,
Silvano

2011/4/8 Iwan B. [email protected]:


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


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Considera l’ambiente prima di stampare questa email. Be a total user
rather than a complete waster.

. . . Silvano S. . . .
email: [email protected]
site: http://www.sistrall.it

non sono sicuro di aver capito bene cosa vuoi ottenere, ma pu darsi che
module Enumerable - RDoc Documentation
ti porti vicino alla soluzione.

Per esempio potresti usare:

table.sub_table { |r| options.all? { |k, v| r[k] == v } }

all? restituisce true solo se il risultato del blocco true per tutti
gli elementi della hash.

Ciao,
Silvano

Era quello che desideravo ottenere!

Grazie mille! :slight_smile:

Ciao,
iwan