我需要将字符串和整数数组转换为连接字符串,同时保留字符串值周围的单引号。例如,我需要转向:
["abc", "xyz", 123, 456]
进入这个:
"'abc','xyz',123,456"
我尝试了join
和to_s
的变体,但这并不是很有效。任何帮助表示赞赏。
我使用了单行代码:
["abc", "xyz", 123, 456].to_s.gsub(/[\[\]\"]/,'[' =>'','"'=>'\'')
#=> "'abc', 'xyz', 123, 456"
但如果有更好的方法,我仍然很好奇。
答案 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"