Il problema di Matteo all'RSC

Ciao oggi da perfetto fancazzista ancora semiubriaco (3 bloody mary, 2
vodka tonic, 1 ginger&whiskey, 1 russian, 2 panini a caso) ho provato
a risolvere il problema proposto ieri da Matteo:

“Ho un array di tre categorie di elementi, come lo partiziono in un
solo passaggio?”

La mia soluzione (comprensiva di due test, giusto per essere
ridondante) è qui: http://pastie.org/279258

Qualcuno ha una soluzione più bella?

%w(m m f g f m f g m m g f).sort
#=> [“f”, “f”, “f”, “f”, “g”, “g”, “g”, “m”, “m”, “m”, “m”, “m”]

In un passaggio.

Il giorno 25/set/08, alle ore 14:15, Luca G. ha scritto:

E inoltre, se sono elementi diversi, tipo numeri che finiscono per 9,
numeri che finiscono per 3 e stringhe, sort non va bene.
Il giorno 25/set/08, alle ore 14:15, Luca G. ha scritto:

Giovanni I. wrote:

E inoltre, se sono elementi diversi, tipo numeri che finiscono per 9,
numeri che finiscono per 3 e stringhe, sort non va bene.
Già stai a cambiare le specifiche? :stuck_out_tongue:
PS: Esiste anche #sort_by :wink:

Le specifiche parlavano di elementi, io ho solo fatto un test con
caratteri :slight_smile:

E anche sort_by non lo fa in un solo passaggio.

Il giorno 25/set/08, alle ore 14:23, Luca G. ha scritto:

Con Ruby 1.9 (credo) possiamo sfruttare il metodo group_by, che e’
definito anche in Rails:

pool = %w(m m f g f m f g m m g f)
=> [“m”, “m”, “f”, “g”, “f”, “m”, “f”, “g”, “m”, “m”, “g”, “f”]

pool.group_by {|x| x}.values.flatten
=> [“m”, “m”, “m”, “m”, “m”, “f”, “f”, “f”, “f”, “g”, “g”, “g”]

Per versioni di ruby precedenti, si puo’ definire il metodo group_by:

module Enumerable
def group_by
assoc = Hash.new
each do |element|
key = yield(element)
if assoc.has_key?(key)
assoc[key] << element
else
assoc[key] = [element]
end
end
assoc
end
end

On Sep 25, 2008, at 2:53 PM, Claudio Petasecca D. wrote:

Con Ruby 1.9 (credo) possiamo sfruttare il metodo group_by, che e’
definito anche in Rails:

anche ruby 1.8.7