如何将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)的程序交换为一般理解的表示。