Method: CSV::Table#delete_if
- Defined in:
- lib/csv/table.rb
#delete_if(&block) ⇒ Object
:call-seq:
table.delete_if {|row_or_column| ... } -> self
Removes rows or columns for which the block returns a truthy value; returns self.
Removes rows when the access mode is :row or :col_or_row; calls the block with each CSV::Row object:
source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_row! # => #<CSV::Table mode:row row_count:4>
table.size # => 3
table.delete_if {|row| row['Name'].start_with?('b') }
table.size # => 1
Removes columns when the access mode is :col; calls the block with each column as a 2-element array containing the header and an Array of column fields:
source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_col! # => #<CSV::Table mode:col row_count:4>
table.headers.size # => 2
table.delete_if {|column_data| column_data[1].include?('2') }
table.headers.size # => 1
Returns a new Enumerator if no block is given:
source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.delete_if # => #<Enumerator: #<CSV::Table mode:col_or_row row_count:4>:delete_if>
887 888 889 890 891 892 893 894 895 896 897 898 899 |
# File 'lib/csv/table.rb', line 887 def delete_if(&block) return enum_for(__method__) { @mode == :row or @mode == :col_or_row ? size : headers.size } unless block_given? if @mode == :row or @mode == :col_or_row # by index @table.delete_if(&block) else # by header headers.each do |header| delete(header) if yield([header, self[header]]) end end self # for chaining end |