Array de objetos


#1

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


#2

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.


#3

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.


#4

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.