2010-08-19 49 views
15

什么是将一个字符串数组转换为一个字符串,同时为每个元素保留引号的最好的惯用(最干净的)方法。
换句话说,从这个:在Ruby中展开一串字符串

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

我需要得到这个

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

单引号和双引号可以在这里互换。 我知道的最好方法是使用map和inject/reduce。

例如:a.map{|dir| "'" + dir + "'"}.join(' ')
EG2:a.reduce("'"){|acc, dir| acc += dir+"' "}

性能可以通过避免温度字符串创建(+运算)而得到提高。这不是我的主要问题。有没有更简洁的方法来达到同样的效果?

+0

你需要逃避阵列成员引号内? – 2010-08-19 16:15:05

+0

不,只保留上面为阵列显示的开始和结束引号。我意识到,所显示的引号不在字符串本身中,这就是为什么在数组上只进行连接时被剥离的原因。 – Alkaline 2010-08-19 23:04:48

回答

27

短并不意味着简单。您的第一个示例简洁易读,易于更改,而不会造成不必要的复杂。

a.map { |s| "'#{s}'" }.join(' ') 
13

试用

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

或者,如果高尔夫

?'+a*"' '"+?' 
+1

所有这些引用都很挑剔,但到目前为止你已经得到了最好的答案。 – Alkaline 2010-08-20 03:25:15

+3

我并不是说这是不好的,但它也不会完全自然地阅读。这种事情会让一个经验丰富的红宝石主义者走向“呃?”乍一看。 – Chuck 2010-08-20 04:33:29

+0

有趣的高尔夫推杆! – captainpete 2016-11-11 01:13:35

1

试试这个:

"'" + a.join("' '") + "'" 
0
"'"+a*"' '"+"'" 

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

a.to_s[1...-1].gsub /",?/,"'"