如何将逗号分隔的字符串转换为数组?


75

有什么办法可以将逗号分隔的字符串转换成Ruby中的数组?例如,如果我有一个像这样的字符串:

"one,two,three,four"

我如何将其转换成这样的数组?

["one", "two", "three", "four"]

为什么会有“ csv”标签?这不适用于.csv文件,只是一个用逗号分隔的字符串。
Mark Szymanski

1
CSV代表逗号分隔值。那就是你的字符串。这是一种以字符串格式存储串行或表格数据的标准方法。不一定需要直接从文件中读取它。
2011年

@Lèsemajesté:好的,我只是认为CSV只是文件。谢谢!
Mark Szymanski

Answers:


145

使用split方法来做到这一点:

"one,two,three,four".split(',')
# ["one","two","three","four"]

如果要忽略前导/尾随空白,请使用:

"one , two , three , four".split(/\s*,\s*/)
# ["one", "two", "three", "four"]

如果要将多行(即CSV文件)解析为单独的数组:

require "csv"
CSV.parse("one,two\nthree,four")
# [["one","two"],["three","four"]]

是否有与PHP等效的功能str_getcsv,可自动处理带引号的CSV,包含(转义)逗号,多行CSV等的值?
2011年

1
@Lèsemajesté:是的,请参阅我的回答。
短暂的2011年

那么“一,二,三,四”呢?有没有一种快速的方法来缩小空间?
vanboom 2015年

5
@vanboom "one, two, three, four".split(/\s*,\s*/)。Split也可以使用正则表达式。或者,map如果您喜欢以下语法,则可以使用该方法:"one, two, three, four".split(',').map(&:strip)
Kevin Sylvestre 2015年

16
require 'csv'
CSV.parse_line('one,two,three,four') #=> ["one", "two", "three", "four"]

这将返回nil空元素CSV.parse_line("one,two,,four") #=> ["one", "two", nil, "four"]
Mark Swardstrom

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.