[Ror-es] ordenar un array asociativo por un campo

Miguel Angel Calleja Lázaro mangelcl at yahoo.es
Sat Sep 1 14:29:20 GMT 2007


Miguel Angel Calleja Lÿffffe1zaro escribió:

>Hola, 
>estoy intendando crearme dos arrays asociativos, unirlos y ordenarlo por el campo fecha, tengo ésto:
>
>        @listado_proyectos=Proyecto.find(:all, :conditions=>["hidden=0 and destacado=1"],:order=>'created_on DESC')
>                @arr_proy=[]
>                for list in @listado_proyectos
>                        @arr_proy << {"id"=>list.id, "fecha"=>list.created_on,"tipo"=>"proyecto"}
>                end
>        @listado_noticias=Noticia.find(:all, :conditions=>["hidden=0 and destacado=1"],:order=>'created_on DESC')
>                @arr_noti=[]
>                for list in @listado_noticias
>                        @arr_noti << {"id"=>list.id, "fecha"=>list.created_on, "tipo"=>"noticia"}
>                end
>
>                @array=@arr_proy.concat(@arr_noti)
>
>mi @array da algo como:
>[{"fecha"=>#<Date: 4908687/2,0,2299161>, "id"=>1, "tipo"=>"proyecto"}, {"fecha"=>#<Date: 4908687/2,0,2299161>, "id"=>2, "tipo"=>"proyecto},{"fecha"=>#Date: 4908687/2,0,2299161>, "id"=>4, "tipo"=>"proyecto"}, {"fecha"=>#<Date: 4908687/2,0,2299161>, "id"=>6, "tipo"=>"proyecto"}, {"2299161>, "id"=>7, "tipo"=>"proyecto"}, {"fecha"=>#<Date: 4908687/2,0,2299161>, "id"=>8, "tipo"=>"proyecto"}, {"fecha"=>#<Date: 4, "tipo"=>"proyecto"}, {"fecha"=>#<Date: 4908687/2,0,2299161>, "id"=>10, "tipo"=>"proyecto"}, {"fecha"=>#<Date: 4908687/2,0,22991ia","id"=>1,"tipo"=>"noticia"}]
>
>
>No se si será ésta la forma correcta de crearlo, he estado viendo la clase Array y Hash, en hash no sabía cómo añadir (<<) asi que probé hacerlo así, ahora me gustaría ordenar mi @array por el campo fecha pero he probado con @array.sort_by {|x| x[1]} y me da este error:
>NoMethodError: You have a nil object when you didn't expect it!
>You might have expected an instance of Array.
>The error occured while evaluating nil.<=>
>        from (irb):32
>
>Alguien me puede decir aparte si lo he hecho bien estos arrays, cómo puedo ordenarlo por el campo fecha? Gracias
>
>
>
>
>
>       
>____________________________________________________________________________________
>Sé un Mejor Amante del Cine                         
>¿Quieres saber cómo? ¡Deja que otras personas te ayuden!
>http://advision.webevents.yahoo.com/reto/entretenimiento.html
>_______________________________________________
>Ror-es mailing list
>Ror-es at lists.simplelogica.net
>http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>  
>
Me respondo a mi mismo
  @listado_proyectos=Proyecto.find(:all, :conditions=>["hidden=0 and 
destacado=1"])
                @arr_proy=Array.new
                for list in @listado_proyectos
                        @arr_proy << {:id=>list.id, 
:fecha=>list.created_on.to_s,:tipo=>"proyecto"}
                end
        @listado_noticias=Noticia.find(:all, :conditions=>["hidden=0 and 
destacado=1"])
                @arr_noti=[]
                for list in @listado_noticias
                        @arr_noti << {:id=>list.id, 
:fecha=>list.created_on.to_s, :tipo=>"noticia"}
                end

                array=@arr_proy.concat(@arr_noti)
                @destacados=array.sort_by {|destacado| 
destacado[:fecha]}.reverse
          




More information about the Ror-es mailing list