2014-11-23 25 views
1

所以我有這樣一段代碼:Ruby中的CSV對象。他們究竟是什麼?

data = CSV.open(filename, headers: true, header_converters: :symbol) 
    @contents = data.map 

文件名是文件路徑,是指我的計算機上的實際文件。

我的問題是我命名數據的CSV對象究竟是什麼?如何映射一個對象?

當調試使用撬,我看到:

[1] pry(#<Session>)> data 

=> <#CSV io_type:File io_path:"./data/event_attendees.csv" encoding:UTF-8 lineno:2 col_sep:"," row_sep:"\n" quote_char:"\"" headers:[:_, :regdate, :first_name, :last_name, :email_address, :homephone, :street, :city, :state, :zipcode]> 

[2] pry(#<Session>)> row 

CSV::Row _:"1" regdate:"11/12/08 10:47" first_name:"Allison" last_name:"Nguyen" email_address:"[email protected]" homephone:"6154385000" street:"3155 19th St NW" city:"Washington" state:"DC" zipcode:"20010" 

所以數據似乎是指一個CSV對象,而不是一個數組。 行似乎指的是csv對象的某些屬性?

無論哪種方式,我從來沒有見過對象之前的方法地圖。到底是怎麼回事?

+0

我不確定你的問題在這裏。你在問什麼是對象?您是否在嘗試使用您無法弄清的CSV文件?如果是這樣,希望的輸出是什麼 – Anthony 2014-11-24 00:05:04

回答

2

map適用於任何包含Enumerable mixin的對象。爲了與Enumerable一起工作,這個班級需要提供each - 這是所有其他好方法所基於的基礎。 CSV類的對象適合這種模式,如您在the documentation for the class中所看到的。

(它不會將它直接推入數組的原因是因爲能夠逐行讀取輸入文件是非常好的事情,而不必在做任何事情之前將所有內容存儲在內存中。)