a = [["John", "Doe"], ["Sue", "Smith"], ["Melba", "Jones"]]
Очевидный способ сделать это, о котором говорили другие, это:
a.map { |arr| arr.join(' ') }.join(', ')
#=> "John Doe, Sue Smith, Melba Jones"
В качестве упражнения вот три способа сделать это без использования Array#map
Используйте Enumerable # reduce (aka inject
)
a.drop(1).reduce(a.first.join(' ')) { |s,name| s + ", %s %s" % name }
#=> "John Doe, Sue Smith, Melba Jones"
Используйте рекурсию
def doit((name, *rest))
rest.empty? ? name.join(' ') : "%s %s, %s" % [*name, doit(rest)]
end
doit(a)
#=> "John Doe, Sue Smith, Melba Jones"
Свести, объединить пробелом, использовать String # gsub для вставки запятых
r = /
\w+[ ]\w+ # match two words separated by a space
(?=[ ]) # positive lookahead asserts that next character is a space
\K # reset start of match to current location and discard all
# previously matched characters from match that is returned
/x # free-spacing regex definition mode
a.flatten.join(' ').gsub(r, ',')
#=> "John Doe, Sue Smith, Melba Jones"