Ruby数组到字符串的转换


178

我有一个像这样的红宝石数组['12','34','35','231']

我想将其转换为类似的字符串'12','34','35','231'

我怎样才能做到这一点?

Answers:


314

我将通过以下方式加入其中:

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

编辑:

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

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


1
结果为“ 12,34,35,231”。结果中缺少单引号。
伯纳德

1
好吧,添加了一些字符串插值以添加第一个和最后一个单引号:P
被腐蚀

如何还原呢?
zx1986

你是什​​么意思回复@ zx1986
腐蚀了

@corroded对不起,我明白了。JSON.parse("[12, 39, 100]")将返回一个数组。
zx1986

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

6
也许使用"'#{i}'"代替。
MladenJablanović10年

认为地图是不需要的。加入应该可以解决问题。见下文
djburdick


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

1
引用姆拉登的话:“也许[使用] "'#{i}'"代替。”
Andrew Grimm

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

这不会产生正确的输出-值需要用单引号引起来。如果这是所需的输出,则string_arr.join(“,”)将是更好的选择。
肖恩·卡梅伦

肖恩,你错了。您是否至少运行过一次表达式?
avihil 2013年

还是错 它会在数组项周围产生双引号,而不是单引号。另外,它依赖于有关“ inspect()”打印数据的格式的假设,这使其易碎。
安德鲁·霍奇金森

['1','2','3']。map {| o | “ \'#{o} \'”“} .join(',')
avihil 2014年

7

我觉得这种方式可读性和红宝石:

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

2

您可以使用一些函数式编程方法来转换数据:

['12','34','35','231'].map{|i| "'#{i}'"}.join(",")


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.