# Generare condizioni di uguaglianza in un blocco

**URL:** <https://www.ruby-forum.com/t/generare-condizioni-di-uguaglianza-in-un-blocco/205558>\
**Category:** IT\
**Created:** [April 8, 2011, 4:57pm UTC](https://www.ruby-forum.com/t/generare-condizioni-di-uguaglianza-in-un-blocco/205558 "2011-04-08T16:57:11Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [April 8, 2011, 4:57pm UTC](https://www.ruby-forum.com/t/generare-condizioni-di-uguaglianza-in-un-blocco/205558/1 "2011-04-08T16:57:11Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![1w4n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/1/65b543/32.png) [@1w4n](https://www.ruby-forum.com/u/1w4n)\
**Post date:** [April 8, 2011, 5:57pm UTC](https://www.ruby-forum.com/t/generare-condizioni-di-uguaglianza-in-un-blocco/205558/2 "2011-04-08T17:57:09Z")

</div>

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](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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](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: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
site: [http://www.sistrall.it](http://www.sistrall.it)

---

<div class="post-metadata">

**Author:** ![1w4n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/1/65b543/32.png) [@1w4n](https://www.ruby-forum.com/u/1w4n)\
**Post date:** [April 13, 2011, 12:11pm UTC](https://www.ruby-forum.com/t/generare-condizioni-di-uguaglianza-in-un-blocco/205558/3 "2011-04-13T12:11:41Z")

</div>

> non sono sicuro di aver capito bene cosa vuoi ottenere, ma pu darsi che  
> [http://www.ruby-doc.org/core/classes/Enumerable.html#M001499](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

Era quello che desideravo ottenere!

Grazie mille! 🙂

Ciao,  
iwan
