2012-06-25 5 views
3

Код ниже работает нормально. Но это кажется неуклюжим.Как объединить в одну строку в Ruby?

Как вы бы описали код в одной строке?

data = Array.new 
@results.each{ |result| data.push(result.get_output) } 
data.join("\n")  

Рубин 1.9.3

+1

У вас заканчиваются линии? Я могу отправить вам еще немного, если вам нравится ... :) –

+0

Я думал, что должен быть лучший, более красноречивый способ. Использование {} .join –

ответ

9

Map оригинальная коллекция, а не создавать новый массив первых:

@results.map(&:get_output).join("\n") 
3

Я не проверял, но попробовать что-то вроде:

data = @results.map{ |result| result.get_output }.join("\n") 
+1

Строго говоря, это не то же самое, что 'data' никогда не содержал массив' join'ed, только массив и вызывал на нем 'join'. Но это может быть просто педантичным. –

+0

@AndrewMarshall, да, вы правы. Я предполагал это намерение, поскольку последняя строка не мутирует ничего, поэтому она должна быть в конце метода и возвращаться так или иначе. –

+0

@ EdwardOcampo-Gooding Да, последняя строка ничего не мутирует. Это весь метод. Я должен был поставить 'def' и' end' в вопросе. –

2
data = @results.collect(&:get_output).join("\") 
  1. Используйте collect (или карту) для создания массива
  2. (&: get_output), равнозначно `collect {| result | result.get_output}
  3. цепи присоединиться к концу результатов для форматирования

Если вы получаете пустые строки, добавьте compact перед тем присоединиться. Это помогает очистить результаты.

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