#ruby
#ruby
Вопрос:
В моем приложении Ruby 2.7 я хочу объединить массив строк, чтобы иметь одну строку, разделенную запятыми. Следующим образом:
[company.name, company.street, company.zipcode, company.city]
=> ["Sanford, Reilly and Schmidt", "Hoffmannstr. 186", "84875", "Gebesee"]
Ожидаемый результат:
["Sanford, Reilly and Schmidt", "Hoffmannstr. 186", "84875 Gebesee"]
Очевидно, что для получения такого результата я могу поместить пустую строку между company.zipcode
и company.city
и в конце использовать .join(', ')
метод, подобный этому:
[company.name, company.street, company.zipcode ' ' company.city].join(', ')
Но, честно говоря, этот код для меня вонючий, есть ли какой-нибудь лучший способ добиться того же результата?
Комментарии:
1. Ну, один из способов сделать его менее «вонючим» — это не использовать
для объединения строк. Вместо этого используйте интерполяцию
[company.name, company.street, "#{company.zipcode} #{company.city}"].join(', ')
2. В драгоценном камне Facets есть множество интересных методов. Array#conjoin — один из них; он похож
join
, но более мощный. Это позволяет использовать второй аргумент (и / или блок):[1,2,3].conjoin(', ', ' and ') # =>"1, 2 and 3"
Ответ №1:
Используйте два join()
вызова:
[company.name, company.street, [company.zipcode, company.city].join(' ')].join(', ')
Этот метод предпочтительнее, если у вас есть непустой разделитель для объединения и / или аргумент массива. В вашем конкретном случае решение с помощью "#{...} #{...}"
engineersmnky короче и понятнее.
Ответ №2:
arr = [company.name, company.street, company.zipcode, company.city]
#=> ["Sanford, Reilly and Schmidt", "Hoffmannstr. 186", "84875", "Gebesee"]
arr[0..-3] << "%s %s" % arr[-2, 2]
#=> ["Sanford, Reilly and Schmidt", "Hoffmannstr. 186", "84875 Gebesee"]
или
arr[0..-3] << arr[-2, 2].join(' ')
#=> ["Sanford, Reilly and Schmidt", "Hoffmannstr. 186", "84875 Gebesee"]
arr
не изменяется.