2013-09-28 5 views
0

Я хотел бы преобразовать каждый элемент массива 2D в строку, в пределах eachНо я не могу использовать do (конкретное требование - это домашнее задание). Массив называется families, и определяется следующим образом:Преобразование 2D массив в строку

#family.rb 

class FamilyDetails 

    attr_accessor :name, :sex, :status, :age 
    def initialize (name, sex, type, role, age) 
    @name = name 
    @sex = sex 
    @type = type 
    @role = role 
    @age = age 
    end 

end 

# Below, an array is created called families; instances of the class are then instantiated within the array elements 
families = [] 

families << FamilyDetails.new('Andrew','Male', 'Child', 'Son' , '27') 
families << FamilyDetails.new('Bill','Male', 'Parent', 'Father' , '63') 
families << FamilyDetails.new('Samantha','Female', 'Parent', 'Mother' , '62') 
families << FamilyDetails.new('Thomas','Male', 'Child', 'Dog' , '10') 
families << FamilyDetails.new('Samantha', 'Female', 'Child', 'Dog' , '4') 

Я попытался использовать метод join следующим образом:

def arrayeachsearch(an_array) 
    an_array.each 
    output = an_array.join(" ") 
    puts output 
end 

arrayeachsearch(families) 

Однако это приводит следующий вывод:

#<FamilyDetails:0x00000002358110> #<FamilyDetails:0x000000027c7f48> #<FamilyDetails:0x000000027c7e58> #<FamilyDetails:0x000000027c7d68> #<FamilyDetails:0x000000027c7c78> 

Я надеюсь на выход как это (я окружил information from the array like this):

  • Член с членством в семье 1: Andrew, который является Male, a Child; Конкретнее, Son возрасте 27
  • Член семьи 2 является Bill кто Male, Parent; конкретно, Father возрасте 63
  • Член семьи 3 Samantha, который является Male, A Parent; Конкретнее, Mother в возрасте 62
  • Семейный член 4 является Thomas кто Male, Child; Конкретнее, Dog возрасте 10
  • Член семьи 5 является Samantha кто Female, Child; конкретно, Dog возраст 4

Что такое лучший способ пойти по этому поводу? Простите мою нехватку знаний, и спасибо за любую помощь - оценили.

+1

это домашнее задание или что? –

+1

Кто сказал, что вы не можете использовать 'do'? Клиент, который не знает, как программировать? Почему вы должны использовать «каждый»? Это пахнет домашней работой, которая должна быть раскрыта, если так. –

+0

Да, это домашнее задание - я не знал, что это должно быть раскрыто (отредактировано, чтобы раскрыть этот факт!). – Tom

ответ

2

Если добавить :role и :type к attr_accessor вы можете использовать:

families.each.with_index(1) { |member, index| 
    puts "Family member #{index} is #{member.name} who is #{member.sex}, a #{member.type}; specifically, a #{member.role} aged #{member.age}" 
} 
1
class FamilyDetails 

    attr_accessor :name, :sex, :status, :age 
    def initialize (i, name, sex, type, role, age) 
    @i = i 
    @name = name 
    @sex = sex 
    @type = type 
    @role = role 
    @age = age 
    end 

    def to_s 
    "Family member #{@i} is #{name} who is #{sex}, a #{type}; specifically, a #{role} aged #{age}" 
    end 
end 

Тогда вы можете просто сделать

puts families 
+0

Спасибо - это работает - за исключением '# {@ i}' бит (должен был принять Стефана, поскольку его первым был) – Tom

1

Он смотрит на меня, у вас есть один одномерный массив, вы вероятно, может сделать что-то вроде

counter = 0 
for member in families 
    counter += 1 
    puts "Family member %i is %s who is %s, a %s, a %s, age %i." %[counter, member.name, member.sex, member.type, member.role, member.age] 
end 
+0

нет метода '++' в ruby ​​ –

+0

я угадаю ваш ответ в python ?? –

+0

Спасибо @IsmaelAbreu, отредактировал – aug2uag

Смежные вопросы