Skip to content

End of Life Ruby 3.0 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →

instance method

CSV::Row#delete

delete(index) → [header, value] or nil
delete(header) → [header, value] or empty_array
delete(header, offset) → [header, value] or empty_array

Removes a specified field from self; returns the 2-element Array [header, value] if the field exists.

If an Integer argument index is given, removes and returns the field at offset index, or returns nil if the field does not exist:

Example
source = "Name,Name,Name\nFoo,Bar,Baz\n"
table = CSV.parse(source, headers: true)
row = table[0]
row.delete(1) # => ["Name", "Bar"]
row.delete(50) # => nil

Otherwise, if the single argument header is given, removes and returns the first-found field with the given header, of returns a new empty Array if the field does not exist:

Example
source = "Name,Name,Name\nFoo,Bar,Baz\n"
table = CSV.parse(source, headers: true)
row = table[0]
row.delete('Name') # => ["Name", "Foo"]
row.delete('NAME') # => []

If argument header and Integer argument offset are given, removes and returns the first-found field with the given header whose index is at least as large as offset:

Example
source = "Name,Name,Name\nFoo,Bar,Baz\n"
table = CSV.parse(source, headers: true)
row = table[0]
row.delete('Name', 1) # => ["Name", "Bar"]
row.delete('NAME', 1) # => []
See also #[]= #delete_if #[] #dig also in 3.3 · 3.2 · 3.1