如何将string数组转换为逗号分隔的string?

我有一个数组:

array = ["10", "20", "50", "99"] 

并希望将其转换为一个简单的逗号分隔的string列表,如下所示:

 "10", "20", "50", "99" 
 ["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"' 

array.join(',')几乎可以做你想要的; 它不会保留价值周围的报价,也不会保留后面的空格。

保留引号和空格: array.map{|item| %Q{"#{item}"}}.join(', ') array.map{|item| %Q{"#{item}"}}.join(', ')这将打印"\"10\", \"20\", \"50\", \"99\"" 。 假设问题确实需要单个string,则转义引号是必需的。

有关%Q : string文字的文档。

可以使用另一个答案build议的 inspect ,我会说这是个人喜好。 我不会,去看看这个源代码 ,然后自己select。

有用的一边: array.to_sentence会给你一个“1,2,3和4”式的输出,这可以很好!

这里:

 array.map {|str| "\"#{str}\""}.join(',') 

几个答案已经提供了使用#map#inspect#join解决scheme。 他们都没有得到CSV编码正确的边缘情况下涉及embedded式逗号和/或元素中的string分隔符的细节。

这可能是一个更好的主意,使用stdlib类CSV然后推出自己的。

 irb> require 'csv' => true irb> a = [10,'1,234','JR "Bob" Dobbs',3.14159] => [10, "1,234", "JR \"Bob\" Dobbs", 3.14159] irb> puts a.to_csv 10,"1,234","JR ""Bob"" Dobbs",3.14159 

如果此编码不需要关心embedded的分隔符,或者仅用于某些内部表示,那么map.join解决scheme就足够了,但是如果生成数据以便与其他需要逗号分隔值(CSV)的程序交换为一般理解的表示。