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.
Aprendiz_ror R. (Guest)
on 2009-05-28 19: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
Daniel R. Troitiño (Guest)
on 2009-05-28 20:46
(Received via mailing list)
2009/5/28 Aprendiz_ror Ruby on rails
<removed_email_address@domain.invalid>:
> 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.
Guillermo (Guest)
on 2009-05-28 21:28
(Received via mailing list)
2009/5/28 Aprendiz_ror Ruby on rails <removed_email_address@domain.invalid>
>      @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.
Aprendiz_ror R. (Guest)
on 2009-05-28 21: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 R. Troitiño wrote:
> 2009/5/28 Aprendiz_ror Ruby on rails
> <removed_email_address@domain.invalid>:
>> 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.