Skip to content

superfluous work in #ordered_map_for #154

Closed
@audibleblink

Description

@audibleblink

exploding zipped rows to flatten them is unnecessary since Hash[] takes a 2-d array

def ordered_map_for columns, row
  h = Hash[*columns.zip(row).flatten]
  row.each_with_index { |r, i| h[i] = r }
  h
end

def ordered_map_for2 columns, row
  h = Hash[columns.zip(row)]
  # columns.zip(row) {|k, v| h[k.to_sym] = v}
  row.each_with_index {|r, i| h[i]=r}
  h
end


require 'benchmark'

columns = %w(a b c d e f g h i j k l m n o p q r s)
row     = %w(1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9)

n = 100000
Benchmark.bm do |x|
  x.report("old ") { n.times do ; ordered_map_for columns, row;  end }
  x.report("new ") { n.times do ; ordered_map_for2 columns, row; end }
end
#######################
       user     system      total        real
old   2.730000   0.040000   2.770000 (  2.826577)
new   2.200000   0.030000   2.230000 (  2.062929)
[Finished in 5.3s]

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions