Forum: Rails-ES array de objetos

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
80b9be0b3d9c2d5fa3372dff8d457a8e?d=identicon&s=25 Aprendiz_ror Ruby on rails (aprendiz_ror)
on 2009-05-28 17:00
Buenas estimados amigos de la lista.

gracias por la ayuda tan especial que nos brindan.

ahora tengo una inquietud de ruby y es sobre array de objetos.

como puedo mejorar este codigo?

sobre todo la parte de cargar el objeto y el array.

class Persona
  attr_accessor :nombre
  attr_accessor :apellido
  attr_accessor :ciudad
  attr_accessor :telefono

  def initialize(nombre, apellido, ciudad, telefono)
      @nombre = nombre
      @apellido = apellido
      @ciudad = ciudad
      @telefono = telefono
  end

end

#esto se va a repetir
#como puedo mejorar esto?
dato = Persona.new("william","betancur","medellin","222222")
arr=[dato]

dato = Persona.new("mateo","gonza","medellin","222333")
arr << dato

dato = Persona.new("guille","hhhhhh","medellin","44444")
arr << dato
# hasta aca se va a repetir

arr.each do |d|
   puts d.nombre
   puts d.ciudad
end

gracias
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2009-05-28 18:46
(Received via mailing list)
2009/5/28 Aprendiz_ror Ruby on rails
<ruby-forum-incoming@andreas-s.net>:
> class Persona
>  end
>
> dato = Persona.new("guille","hhhhhh","medellin","44444")
> arr << dato
> # hasta aca se va a repetir
>
> arr.each do |d|
>   puts d.nombre
>   puts d.ciudad
> end
>
> gracias

No te ahorras demasiado, pero creo que queda algo más claro:

arr = [Persona.new("william","betancur","medellin","222222"),
       Persona.new("mateo","gonza","medellin","222333"),
       Persona.new("guille","hhhhhh","medellin","44444")]

Suerte.
39086eb3d9a1437276d07c08ea0c3821?d=identicon&s=25 Guillermo (Guest)
on 2009-05-28 19:28
(Received via mailing list)
2009/5/28 Aprendiz_ror Ruby on rails <ruby-forum-incoming@andreas-s.net>
>      @ciudad = ciudad
>      @telefono = telefono
>  end
>
> end


Persona = Struct.new(:nombre,:apellido,:ciudad,:telefono)


> # hasta aca se va a repetir
>


dato = []
dato << Persona.new(*%w(william betancur medellin 2222222))
dato << Persona.new(*%w(mateo gonza medellin 22232222))
dato << Persona.new(*%w(guille guapo mucho 4444444))



> arr.each do |d|
>   puts d.nombre
>   puts d.ciudad
> end
>

puts arr.map{|p| [p.nombre,p.cidudad] * "\n" } * "\n"



Hasta donde yo se, ninguna de las cosas que hecho mejor
sustancialmente nada. La asignación de persona,
no tiene diferencias respecto a tu implementación, es más una estructura
te
da más facilidades.

La última expresión, tiene el problema que, pese a que haga solo una
llamada
al sistema para imprimir, si el array es muy grande, puede duplicar la
cantidad de memoria requerida.

Tampoco he entendido que quieres decir con "mejorar" un código. Lo
quieres
más rápido, más legible, no entiendo que es lo que quieres muy bien.

De todas formas, tal vez en una lista especializada en ruby como ruby-es
te
puedan ayudar más.


Un Saludo.
80b9be0b3d9c2d5fa3372dff8d457a8e?d=identicon&s=25 Aprendiz_ror Ruby on rails (aprendiz_ror)
on 2009-05-28 19:31
Gracias Daniel por tu respuesta.

suponiendo que esta parte:

 arr = [Persona.new("william","betancur","medellin","222222"),
        Persona.new("mateo","gonza","medellin","222333"),
        Persona.new("guille","hhhhhh","medellin","44444")]

se cargara en un ciclo, donde los valores se ingresan por teclado.

es a modo de ejercicio de ruby.

saludos y gracias


Daniel Rodriguez Troitiño wrote:
> 2009/5/28 Aprendiz_ror Ruby on rails
> <ruby-forum-incoming@andreas-s.net>:
>> class Persona
>>  end
>>
>> dato = Persona.new("guille","hhhhhh","medellin","44444")
>> arr << dato
>> # hasta aca se va a repetir
>>
>> arr.each do |d|
>>   puts d.nombre
>>   puts d.ciudad
>> end
>>
>> gracias
>
> No te ahorras demasiado, pero creo que queda algo más claro:
>
> arr = [Persona.new("william","betancur","medellin","222222"),
>        Persona.new("mateo","gonza","medellin","222333"),
>        Persona.new("guille","hhhhhh","medellin","44444")]
>
> Suerte.
This topic is locked and can not be replied to.