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
我几乎尝试了所有方法,但感觉走投无路了。
我有一个 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
上使用#fieldshttp://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