# L'include in un array come funziona?

**URL:** <https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363>\
**Category:** IT\
**Created:** [April 7, 2007, 3:28pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363 "2007-04-07T15:28:41Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 7, 2007, 3:28pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/1 "2007-04-07T15:28:41Z")

</div>

Mi spiego.  
Nel codice ho m=riga1.scan(/\<(._?@._?)\>|(?)/).  
In pratica in una riga di questo tipo  
Passed, [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) → [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid), Message-ID:  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid), Hits: -  
Mi trova tutte le occorrenze corrispondenti agli indirizzi mail.  
Successivamente faccio un

```
   @hash.keys.each do |mail|
     if m.include? "#{mail}"
       puts "#{mail} spedito"
     elsif
       puts "Boh!!!!"
     end
   end

```

L’hash contiente valori del tipo "removed\_email\_address@domain.invalid-\>“nome cognome”

sono sicuro che almeno uno dei valori contenuti in mail nell’hash e’  
contenuto anche in m.  
Perche’ il risultato e’ sempre “Boh” cioe’ nell’array m non risulta  
incluso almeno quel valore che io sono sicuro esserci?

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 7, 2007, 4:02pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/2 "2007-04-07T16:02:45Z")

</div>

Mauro S. wrote:

> ```
> if m.include? "#{mail}"
> 
> ```

perché? #{mail}? m.include?(mail) dovrebbe risolvere il problema.

Ciao

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 7, 2007, 4:05pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/3 "2007-04-07T16:05:45Z")

</div>

Domenico Delle S. wrote:

> Mauro S. wrote:
> 
> > ```
> > if m.include? "#{mail}"
> > 
> > ```
> 
> perché? #{mail}? m.include?(mail) dovrebbe risolvere il problema.

non cambia niente, ho provato anche a mettere un valore del tipo  
if m.include? “removed\_email\_address@domain.invalid” che sono sicuro esserci ma non lo trova.  
Perche’? Mi sta facendo dannare…

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 7, 2007, 4:42pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/4 "2007-04-07T16:42:48Z")

</div>

> Proviamo a pensare che l’include?, effettivamente, veda le stringhe come  
> diverse; perché? Potrebbe essere un problema di codifica, magari, io ho  
> fatto tutto dentro irb, infatti, tu prendi i tuoi dati da un file di  
> log, a quanto mi sembra di capire. Se fosse questo il caso, si potrebbe  
> utilizzare iconv per risolvere la questione.

Esempio?  
Scusa ma sono alle prima armi con ruby.

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 7, 2007, 4:28pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/5 "2007-04-07T16:28:48Z")

</div>

Mauro S. wrote:

> non cambia niente, ho provato anche a mettere un valore del tipo  
> if m.include? “removed\_email\_address@domain.invalid” che sono sicuro esserci ma non lo trova.  
> Perche’? Mi sta facendo dannare…

Ho fatto una prova con irb, usando dei valori simili ai tuoi e non  
cambia anche per me, la soluzione che ti ho proposto e solo più  
veloce/sintatticamente più corretta, dato che passi comunque una stringa  
ad include?.

L’unica differenza rispetto al tuo codice è che io ho usato  
Hash.each\_key, al posto del tuo Hash.keys.each, ma non mi sembra una  
differenza sostanziale e, comunque sia, anche provando con  
Hash.keys.each mi funziona ugualmente.

Proviamo a pensare che l’include?, effettivamente, veda le stringhe come  
diverse; perché? Potrebbe essere un problema di codifica, magari, io ho  
fatto tutto dentro irb, infatti, tu prendi i tuoi dati da un file di  
log, a quanto mi sembra di capire. Se fosse questo il caso, si potrebbe  
utilizzare iconv per risolvere la questione.

Ciao

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 15, 2007, 4:53pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/6 "2007-04-15T16:53:00Z")

</div>

On 4/7/07, Mauro S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> puts "#{mail} spedito"
> elsif
> puts "Boh!!!!"
> end
> end
> 
> ```

Di che tipo è l’oggetto cercato dentro a m? Se non è una stringa, la  
include? fallisce perché tu la stai confrontando con una stringa (  
“#{mail}” equivale a mail.to\_s)

M

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [April 8, 2007, 10:33pm UTC](https://www.ruby-forum.com/t/linclude-in-un-array-come-funziona/91363/7 "2007-04-08T22:33:23Z")

</div>

Domenico Delle S. wrote:

> Mauro S. wrote:
> 
> > non cambia niente, ho provato anche a mettere un valore del tipo  
> > if m.include? “removed\_email\_address@domain.invalid” che sono sicuro esserci ma non lo trova.  
> > Perche’? Mi sta facendo dannare…
> 
> Ho fatto una prova con irb, usando dei valori simili ai tuoi e non  
> cambia anche per me, la soluzione che ti ho proposto e solo più  
> veloce/sintatticamente più corretta, dato che passi comunque una stringa  
> ad include?.

Ho risolto con l’aiuto di qualcuno in un newgroup ma a causa della mia  
scarsa conoscenza di ruby mi sono limitato ad applicare i suggerimenti  
senza capire molto.  
Riposto le poche righe di codice:

class MyNewClass  
@hash = {}  
@arr = []  
@a = []  
IO.foreach(“ComuneCA.txt”) do |riga|  
codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)  
@hash.store("#{mail}","#{cognome} #{nome}")  
end  
IO.foreach(“mail.log”) do |riga1|  
if riga1.match(/Passed/)  
@a=riga1.scan(/\<(._?@._?)\>|(?)/)  
@hash.each\_key do |mail|  
if @a.include?(mail)  
puts “#{mail} trovato”  
elsif  
puts “non trovato!!!”  
end  
end  
puts @a.first.class  
end  
end  
end

mi e’ stato sugerito di controllare il risultato di puts @a.first.class  
ed effettivamente ritorna un array, infatti @a e’ un array.  
Dovrebbe essere regolare?  
Ma cosa fanno quei metodi first.class?  
Successivamente ho modificato, sempre dietro suggerimento, la  
@a=riga1.scan(/\<(._?@._?)\>|(?)/) in  
@a=riga1.scan(/\<(._?@._?)\>|(?)/).flatten.compact, dopo questa  
modifica magicamente tutto funziona.  
Qualcuno potrebbe spiegarmi?  
Grazie mille.
