Project

General

Profile

Actions

Bug #14482

closed

headerが重複したCSVをheaders:trueでparseした場合、row.to_h[key] と row[key] の結果が一致しない

Added by tompng (tomoya ishida) about 6 years ago. Updated about 6 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]
[ruby-dev:50475]

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
Actions

Also available in: Atom PDF

Like0
Like0