1

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

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

进入这个:

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

我尝试了 and 的变体jointo_s但这并不完全奏效。任何帮助表示赞赏。

我得到它与单线工作:

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

但我仍然很好奇是否有更好的方法。

4

3 回答 3

2

以下应该工作

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

返回

"'abc','xyz',123,456"
于 2012-11-24T03:25:13.860 回答
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"
于 2012-11-24T04:20:37.393 回答
2

当数组有带数字的字符串时 to_i 转换为整数。如果您想将其保留为字符串。我认为你需要使用这个。

      arr=["123", "abc", 123]
      arr.collect{|e|( e.is_a? Integer)? e :"'#{e}'"}.join(',') #=> "'abc','123',1,3"
于 2012-11-24T04:21:35.713 回答