Kas*_*ail 64 ruby arrays ruby-on-rails
我有一个数组:
array = ["10", "20", "50", "99"]
Run Code Online (Sandbox Code Playgroud)
并希望将其转换为一个简单的逗号分隔字符串列表,如下所示:
"10", "20", "50", "99"
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 113
array.join(',')几乎可以做你想做的事; 它不会保留值后面的引号或后面的空格.
保留引号和空格:array.map{|item| %Q{"#{item}"}}.join(', ')
这将打印"\"10\", \"20\", \"50\", \"99\"".假设问题确实需要单个字符串,则转义引号是必要的.
关于%Q:字符串文字的文档.
您可以inspect按照另一个答案的建议使用,我会说这是个人偏好.我不会,去看看源代码并自己选择.
有用的一边:array.to_sentence会给你一个"1,2,3和4"风格输出,这可能很好!
scz*_*zzo 79
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
Run Code Online (Sandbox Code Playgroud)
Lin*_*ios 17
这里:
array.map {|str| "\"#{str}\""}.join(',')
Run Code Online (Sandbox Code Playgroud)
dbe*_*hur 10
几个答案都使用提供的解决方案#map,#inspect,#join.对于涉及元素中嵌入逗号和/或字符串分隔符的边缘情况,所有这些都无法获得CSV编码的某些细节.
这可能是一个更好的主意,使用stdlib类CSV然后滚动自己的.
irb> require 'csv'
=> true
irb> a = [10,'1,234','J.R. "Bob" Dobbs',3.14159]
=> [10, "1,234", "J.R. \"Bob\" Dobbs", 3.14159]
irb> puts a.to_csv
10,"1,234","J.R. ""Bob"" Dobbs",3.14159
Run Code Online (Sandbox Code Playgroud)
如果此编码不需要关心嵌入分隔符,或仅用于某些内部表示,则map.join解决方案就足够了,但如果生成数据以便与其他期望逗号分隔值(CSV)的程序交换,则它们将失败通常理解的表示.
最简单的解决方案是使用内置的“.to_sentence”方法。
所以
["fred", "john", "amy"].to_sentence 输出 "fred, john, and amy"
| 归档时间: |
|
| 查看次数: |
84787 次 |
| 最近记录: |