如何将整数和字符串数组转换为字符串,但保留字符串周围的单引号?

时间:2012-11-24 03:00:07

标签: ruby

我需要将字符串和整数数组转换为连接字符串,同时保留字符串值周围的单引号。例如,我需要转向:

["abc", "xyz", 123, 456]

进入这个:

"'abc','xyz',123,456"

我尝试了jointo_s的变体,但这并不是很有效。任何帮助表示赞赏。

我使用了单行代码:

["abc", "xyz", 123, 456].to_s.gsub(/[\[\]\"]/,'[' =>'','"'=>'\'')
#=> "'abc', 'xyz', 123, 456"

但如果有更好的方法,我仍然很好奇。

3 个答案:

答案 0 :(得分:2)

以下内容应该有效

array = ["abc", "xyz", 123, 456]
array.collect{|e| e.to_i == e ? e : "'#{e}'"}.join(",")

返回

"'abc','xyz',123,456"

答案 1 :(得分:2)

使用inspect,而不是to_s

通常,在字符串文字表达式中,使用双引号而不是单引号。如果你不介意使用双引号而不是单引号,那么很简单:

["abc", "xyz", 123, 456].map(&:inspect).join(",")
# => "\"abc\",\"xyz\",123,456"

但是如果你真的想要单引号,那么只要原始字符串中没有双引号就不会那么困难:

["abc", "xyz", 123, 456].map(&:inspect).join(",").tr('"', "'")
# => "'abc','xyz',123,456"

答案 2 :(得分:2)

当数组包含数字to_i的字符串转换为整数时。如果要将其保留为字符串。我想你需要使用它。

      arr=["123", "abc", 123]
      arr.collect{|e|( e.is_a? Integer)? e :"'#{e}'"}.join(',') #=> "'abc','123',1,3"