# Ordinare un array

**URL:** <https://www.ruby-forum.com/t/ordinare-un-array/125592>\
**Category:** IT\
**Created:** [January 10, 2008, 1:10pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592 "2008-01-10T13:10:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 10, 2008, 1:10pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/1 "2008-01-10T13:10:28Z")

</div>

a=Dir[’/prova’]  
ottengo nell’array a tutti i files contenuti nella directory /prova.  
Tali files sono del tipo: file.1.gz, file.2.gz, file.100.gz,  
file.102.gz,  
ecc. fino al 1330.  
Nellì’array me li ritrovo cosi’ come vengono letti dalla directory e cioe’  
file.1.gz, file.100.gz, file.102.gz, file.2.gz  
Poiche’ dovro’ poi leggere tali file secondo l’ordine dato dalla seconda  
estensione dovrei prima poterli ordinare in tal modo all’interno  
dell’array.  
Come si possono ordinare in modo che risultino file.1.gz, file.2.gz,  
file.100.gz, file.102.gz, ecc.?

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 10, 2008, 1:13pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/2 "2008-01-10T13:13:59Z")

</div>

On Jan 10, 2008 7:09 AM, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Come si possono ordinare in modo che risultino file.1.gz, file.2.gz,  
> file.100.gz, file.102.gz, ecc.?

Usa NaturalSort: [http://rubyforge.org/projects/naturalsort/](http://rubyforge.org/projects/naturalsort/)

## Ciao, Antonio

[http://stacktrace.it](http://stacktrace.it) - Aperiodico di resistenza informatica.  
[http://antoniocangiano.com](http://antoniocangiano.com) - Zen and the Art of Ruby P.ming  
[http://math-blog.com](http://math-blog.com) - Math Blog: Mathematics is wonderful!  
[http://effettofarfalla.com](http://effettofarfalla.com) - Il battito d’ali di un italiano a Toronto

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 10, 2008, 1:18pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/3 "2008-01-10T13:18:41Z")

</div>

e’ l’unica soluzione questa?

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 10, 2008, 2:41pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/4 "2008-01-10T14:41:23Z")

</div>

Se il nome dei files rispecchia sempre lo schema che hai detto, puoi  
provare cosi’:

a.sort\_by {|f| /.+.(\d+).gz/.match(f)[1].to\_i }

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 10, 2008, 1:19pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/5 "2008-01-10T13:19:16Z")

</div>

Dai un’occhiata a questi due metodi:

Enumerable#sort  
Enumerable#sort\_by

2008/1/10, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 11, 2008, 9:02am UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/6 "2008-01-11T09:02:48Z")

</div>

2008/1/10 Claudio Petasecca D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Se il nome dei files rispecchia sempre lo schema che hai detto, puoi  
> provare cosi’:
> 
> a.sort\_by {|f| /.+.(\d+).gz/.match(f)[1].to\_i }

me la potresti spiegare?  
scusa l’ignoranza.

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 17, 2008, 3:33pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/7 "2008-01-17T15:33:02Z")

</div>

Mauro wrote:

> 2008/1/10 Claudio Petasecca D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > Se il nome dei files rispecchia sempre lo schema che hai detto, puoi  
> > provare cosi’:
> > 
> > a.sort\_by {|f| /.+.(\d+).gz/.match(f)[1].to\_i }
> 
> me la potresti spiegare?  
> scusa l’ignoranza.

L’espressione regolare /.+.(\d+).gz/ seleziona un gruppo di cifre  
(\d+) contenute tra “.” e un “.gz”  
Il metodo Regex::match, usato con un blocco, applica il blocco al  
pattern selezionato (il gruppo di cifre).

Il costrutto sort\_by ordina un’enumeration secondo quello che si ottiene  
dal blocco che segue, e il blocco riporta l’intero che il gruppo di  
cifre rappresenta.

E scusa il ritardo

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 22, 2008, 1:34pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/8 "2008-01-22T13:34:04Z")

</div>

Ok, grazie, l’ho provato pero’ non funziona.

2008/1/17 Claudio Petasecca D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [January 22, 2008, 2:13pm UTC](https://www.ruby-forum.com/t/ordinare-un-array/125592/9 "2008-01-22T14:13:35Z")

</div>

Strano a me funziona.  
Ti porto l’intero (!) sorgente:

a = Dir[‘prova/_’]  
puts a.join(",")  
puts  
a = Dir['prova/_’].sort\_by {|f| /.+.(\d+).gz/.match(f)[1].to\_i }  
puts a.join(",")

e l’output:

prova/file.100.gz,prova/file.101.gz,prova/file.102.gz,prova/file.15.gz,prova/file.200.gz,prova/file.201.gz,prova/file.202.gz,prova/file.5.gz,prova/file.99.gz

prova/file.5.gz,prova/file.15.gz,prova/file.99.gz,prova/file.100.gz,prova/file.101.gz,prova/file.102.gz,prova/file.200.gz,prova/file.201.gz,prova/file.202.gz
