Actions
Bug #14482
closedheaderが重複したCSVをheaders:trueでparseした場合、row.to_h[key] と row[key] の結果が一致しない
Description
1行目に重複したkeyがあるcsvファイルをheaders: trueでparseした場合、
row[key]とrow.to_h[key]が異なる値を返します。
require 'csv'
invalid_header_csv = "id,name,name\n1,ichiro,ICHIRO\n2,jack,JACK"
rows = CSV.parse invalid_header_csv, headers: true
puts rows[0]['name'] #=> ichiro
puts rows[0].to_h['name'] #=> ICHIRO
ドキュメントには
to_hash -> Hash
自身をシンプルなハッシュに変換します。
フィールドの順序は無視されます。 重複したフィールドは削除されます。
とありますが、削除されるフィールドとrow[key]で無視されるフィールドは一致している方が良いのではないかと思います。
class CSV::Row
def to_h
headers.uniq.map { |key| [key, self[key]] }.to_h
end
alias_method :to_hash, :to_h
end
Updated by kou (Kouhei Sutou) about 7 years ago
- Status changed from Open to Closed
- Assignee set to kou (Kouhei Sutou)
後方互換性がなくなってしまうのでどうするかなぁと考えてみたんですが、もともと重複していた場合はなにを返すかわからない、という仕様だったので変わっても大丈夫かなぁと言う気持ちになったので、同じになるようにしました。
Actions
Like0
Like0