2016-07-04 4 views
2

Я младший рубиновый кодер. В настоящее время я пытаюсь выяснить, что не так с кодом, который я пишу. В принципе, у меня массив массивов, и я пытаюсь пропустить его и помещает каждый массив в строку. Но независимо от того, что я делаю, ничего не работает, если я не делаю это долго, что я действительно не хочу делать. Для начала, вот мой массив:Проблема с чередованием массива массивов в Ruby

array1 = [["Mittens", "is", "a", "cat"], ["Lily", "is", "a", "dog"], ["Alex", "is", "a", "turtle"]] 

Я хочу поместить результаты так, что получается, например, так:

Mittens is a cat 
Lily is a dog 
Alex is a turtle 

Я пытался использовать это или вариацию это в течение нескольких часов теперь:

array1.each do |sub_array| 
    sub_array.join(" ") 
    puts sub_array 
end 

Но всякий раз, когда я пытаюсь его, он заканчивает тем, как это:

Mittens 
is 
a 
cat 
Lily 
is 
a 
dog 
Alex 
is 
a 
turtle 

Теперь, если я изменю «puts» на «print», я просто получаю те же три массива, которые я получил раньше. Итак, не заканчивая сдачу и просто жесткое кодирование трех «ставит» заявления в моей программе, что мне здесь не хватает? Я знаю, что это очень простая вещь, и я хотел бы написать функцию цикла, которая обеспечивает это легко. Спасибо, что посмотрели!

+0

метод как 'join' не изменит исходный объект. В принципе невозможно, чтобы метод менял объект из одного класса в другой, поэтому строка никогда не волшебным образом превратится в массив. Единственный способ изменить классы - создать новую ссылку на переменную через * присваивание *, как правило, с помощью '='. Методы Ruby могут быть немного сложными, когда дело доходит до того, что они возвращают в сравнении с тем, что они мутируют, поэтому всегда держите документацию открытой и проверяйте каждый вызываемый вами вызов. Нет никакого стыда в чтении руководства. – tadman

ответ

3

Array#join не мутирует sub_array, он просто возвращает строку. Вы можете распечатать результаты sub_array.join(" ") так:

array1.each do |sub_array| 
    puts sub_array.join(" ") 
end 
+0

Спасибо, это было хорошее решение, которое я не совсем рассматривал. –

1

Как SEPH сказал в joinметод возвращает строку, но не преобразовать массив в строку (http://ruby-doc.org/core-2.2.0/Array.html#method-i-join).

Таким образом, вы можете сделать это:

array1.each do |sub_array| 
    sub_array_string = sub_array.join(" ") 
    puts sub_array_string 
end 
+0

Благодарим за предложение! –

+0

Вы в основном правы, но промежуточная переменная не нужна и делает этот код чрезмерно подробным. Однако примечание о функции метода «join» важно. – tadman

+0

@tadman Конечно. Это продемонстрировало, что оно возвращает строку. –