Ответ 1
Более короткий не всегда означает более простой. Ваш первый пример был кратким, удобочитаемым и легко изменяемым, без излишне сложного.
a.map { |s| "'#{s}'" }.join(' ')
Какой лучший идиоматический (самый чистый) способ преобразования массива строк в строку, сохраняя приложенные кавычки для каждого элемента.
Другими словами, из этого:
a = ["file 1.txt", "file 2.txt", "file 3.txt"]
Мне нужно будет это
"'file 1.txt' 'file 2.txt' 'file 3.txt'"
Здесь можно поменять местами одиночные и двойные кавычки. Лучшие способы, о которых я знаю, - это использовать карту и ввести/уменьшить.
например: a.map{|dir| "'" + dir + "'"}.join(' ')
eg2: a.reduce("'"){|acc, dir| acc += dir+"' "}
Производительность может быть улучшена за счет исключения создания строки temp (+ operator). Это не мой главный вопрос. Есть ли более чистый более сжатый способ достижения такого же результата?
Более короткий не всегда означает более простой. Ваш первый пример был кратким, удобочитаемым и легко изменяемым, без излишне сложного.
a.map { |s| "'#{s}'" }.join(' ')
Попробуйте
"'#{a.join("' '")}'"
Или, если игра в гольф
?'+a*"' '"+?'
Попробуйте следующее:
"'" + a.join("' '") + "'"
"'"+a*"' '"+"'"
или
"'#{a*"' '"}'"
или
a.to_s[1...-1].gsub /",?/,"'"