Ruby数组转换为字符串

206
我有一个Ruby数组,如['12','34','35','231']
我想将它转换成一个字符串,如'12','34','35','231'
我该怎么做?
13个回答

355

我也加入了这个活动:

['12','34','35','231'].join(', ')
# => 12, 34, 35, 231

编辑:

"'#{['12','34','35','231'].join("', '")}'"
# => '12','34','35','231'

一些字符串插值来添加第一个和最后一个单引号 :P


1
这将导致“12,34,35,231”。结果中缺少单引号。 - Bernard
1
好的,我添加了一些字符串插值来添加第一个和最后一个单引号 :P - corroded
如何撤销这个操作? - zx1986
你是什么意思 @zx1986 回退? - corroded
@corroded 抱歉,我明白了。JSON.parse("[12, 39, 100]")会返回一个数组。 - zx1986

45
> a = ['12','34','35','231']
> a.map { |i| "'" + i.to_s + "'" }.join(",")
=> "'12','34','35','231'"

7
也许可以使用"'#{i}'"代替。 - Mladen Jablanović
不需要使用map函数,join函数就可以解决问题。请参见下面。 - djburdick

36

尝试运行以下代码 ['12','34','35','231']*","

将会得到结果"12,34,35,231"

希望这是您所期望的结果,请告诉我。


1
我认为原帖需要加上单引号。 - Laf

12
array.map{ |i|  %Q('#{i}') }.join(',')

1
引用Mladen的话,“也许可以使用"'#{i}'"代替。” - Andrew Grimm
这是正确的做法,应该被接受为答案。 - Claudio Floreani

9
string_arr.map(&:inspect).join(',') # or other separator

这不会产生正确的输出 - 值需要用单引号括起来。如果这是期望的输出,则string_arr.join(“,”)将是更好的选择。 - Sean Cameron
Sean,你错了。你至少运行过这个表达式吗? - avihil
还是不对。它会在数组条目周围产生双引号,而不是单引号。此外,它依赖于关于“inspect()”打印数据格式的假设,这使得它很脆弱。 - Andrew Hodgkinson
['1','2','3'].map { |o| "'#{o}'" }.join(',') - avihil

7
我认为这种方式易读且符合 Ruby 风格:
add_quotes =- > x{"'#{x}'"}

p  ['12','34','35','231'].map(&add_quotes).join(',') => "'12','34','35','231'"

5
> puts "'"+['12','34','35','231']*"','"+"'"
'12','34','35','231'

> puts ['12','34','35','231'].inspect[1...-1].gsub('"',"'")
'12', '34', '35', '231'

4

还有另一种变体

a = ['12','34','35','231']
a.to_s.gsub(/\"/, '\'').gsub(/[\[\]]/, '')

3
irb(main)> varA
=> {0=>["12", "34", "35", "231"]}
irb(main)> varA = Hash[*ex.collect{|a,b| [a,b.join(",")]}.flatten]
...

3
irb(main):027:0> puts ['12','34','35','231'].inspect.to_s[1..-2].gsub('"', "'")
'12', '34', '35', '231'
=> nil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接