From c4ffb5cd5932e47c0c5d1a49d886d1317503e611 Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Thu, 12 Mar 2020 23:51:09 +0000 Subject: [PATCH] Handle the case when two split arrays have different size in `compare_alphanumerically` --- src/util.cr | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/util.cr b/src/util.cr index bafcdb8..1ea3445 100644 --- a/src/util.cr +++ b/src/util.cr @@ -47,16 +47,21 @@ end def compare_alphanumerically(c, d) is_c_bigger = c.size <=> d.size - begin - c.zip(d) do |a, b| - if is_numeric(a) && is_numeric(b) - compare = a.to_i <=> b.to_i - return compare if compare != 0 - else - compare = a <=> b - return compare if compare != 0 - end - end - is_c_bigger + if c.size > d.size + d += [nil] * (c.size - d.size) + elsif c.size < d.size + c += [nil] * (d.size - c.size) end + c.zip(d) do |a, b| + return -1 if a.nil? + return 1 if b.nil? + if is_numeric(a) && is_numeric(b) + compare = a.to_i <=> b.to_i + return compare if compare != 0 + else + compare = a <=> b + return compare if compare != 0 + end + end + is_c_bigger end