Свести массив строк в Ruby - PullRequest
       0

Свести массив строк в Ruby

15 голосов
/ 19 августа 2010

Какой самый лучший идиоматический (самый чистый) способ преобразовать массив строк в строку, сохраняя при этом заключенные в кавычки для каждого элемента.
Другими словами, из этого:

a = ["file 1.txt", "file 2.txt", "file 3.txt"]

Iнужно получить это

"'file 1.txt' 'file 2.txt' 'file 3.txt'"

Одиночные и двойные кавычки можно здесь поменять местами.Наилучшие способы, которые я знаю, - это использовать карту и вставить / уменьшить.

например: a.map{|dir| "'" + dir + "'"}.join(' ')
eg2: a.reduce("'"){|acc, dir| acc += dir+"' "}

Производительность можно улучшить, избегая создания временной строки (+ оператор).Это не мой главный вопрос.Есть ли более чистый и лаконичный способ достижения того же результата?

Ответы [ 4 ]

27 голосов
/ 20 августа 2010

Короче не всегда значит проще. Ваш первый пример был кратким, читабельным и легко изменяемым, без излишней сложности.

a.map { |s| "'#{s}'" }.join(' ')
13 голосов
/ 19 августа 2010

Попробуйте

"'#{a.join("' '")}'"

Или если играете в гольф

?'+a*"' '"+?'
1 голос
/ 19 августа 2010

Попробуйте это:

"'" + a.join("' '") + "'"
0 голосов
/ 20 августа 2010
"'"+a*"' '"+"'"

или

"'#{a*"' '"}'"

или

a.to_s[1...-1].gsub /",?/,"'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...