ruby hash.values 不适用于内置方法

ruby hash.values is not working with built in method

我几乎尝试了所有方法,但感觉走投无路了。

我有一个 CSV 文件并从中读取一行:

CSV.foreach(file, quote_char: '"', col_sep: ',', row_sep: :auto, headers: true) { |line|

    newLine = []
    newLine = line.values #undefined method .values
    ...
}

line 显然是哈希,因为 line['column_name'] 工作正常而且 line.to_a returns ["col","value","col2","value2",...]

请帮忙,谢谢!

您可以在 class CSV::Row

上使用#fields

http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV/Row.html

它不是常规哈希,它是 CSV::Row 的实例,请参阅 here 了解 API

正如您在以下代码的结果中看到的,方法值不存在。您使用 line['column_name'] 的解决方案很好。 不带参数的方法字段可以获取所有字段

CSV.parse(DATA, :col_sep => ",", :headers => true).each do |row|
    puts row.class
    puts row.methods - Object.methods
end

__END__
kId,kName,kURL
1,Google UK,http://google.co.uk
2,Yahoo UK,http://yahoo.co.uk

这是一个 CSV 行,部分是数组,部分是散列,没有可用的 .values 方法。首先使用.to_hash,然后您就可以使用.values。 (请注意,这将删除字段排序和任何重复字段)

newLine = line.to_hash.values