From 6e74fb8db66695649ad0726d88dbecea2dad1722 Mon Sep 17 00:00:00 2001 From: Oleg Yakovenko Date: Mon, 26 Apr 2021 23:14:09 +0300 Subject: Optimize Axlsx.cell_range (#94) Optimize Axlsx.cell_range by using minmax_by instead of sorting the cells (the sorted cells are not used for anything else in this method). --- lib/axlsx.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/axlsx.rb b/lib/axlsx.rb index 5be3c526..0c8c3850 100644 --- a/lib/axlsx.rb +++ b/lib/axlsx.rb @@ -51,10 +51,11 @@ module Axlsx # determines the cell range for the items provided def self.cell_range(cells, absolute=true) return "" unless cells.first.is_a? Cell - cells = sort_cells(cells) - reference = "#{cells.first.reference(absolute)}:#{cells.last.reference(absolute)}" + + first_cell, last_cell = cells.minmax_by(&:pos) + reference = "#{first_cell.reference(absolute)}:#{last_cell.reference(absolute)}" if absolute - escaped_name = cells.first.row.worksheet.name.gsub ''', "''" + escaped_name = first_cell.row.worksheet.name.gsub ''', "''" "'#{escaped_name}'!#{reference}" else reference @@ -66,7 +67,7 @@ module Axlsx # @param [Array] cells # @return [Array] def self.sort_cells(cells) - cells.sort { |x, y| [x.index, x.row.row_index] <=> [y.index, y.row.row_index] } + cells.sort_by(&:pos) end #global reference html entity encoding -- cgit v1.2.3