From f3e0bfeeb2ce89ba21b743c64f82f58f68966334 Mon Sep 17 00:00:00 2001 From: Haydon Ryan Date: Wed, 2 Sep 2026 18:15:52 -0500 Subject: [PATCH] uucore: make Range::merge linear instead of quadratic --- src/uucore/src/lib/features/ranges.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/uucore/src/lib/features/ranges.rs b/src/uucore/src/lib/features/ranges.rs index 06d7c510dd0..bf4bb554d6d 100644 --- a/src/uucore/src/lib/features/ranges.rs +++ b/src/uucore/src/lib/features/ranges.rs @@ -246,16 +246,14 @@ impl Range { /// Is guaranteed to return only disjoint ranges in a sorted order. pub fn merge(mut ranges: Vec) -> Vec { ranges.sort(); - - // merge overlapping ranges - for i in 0..ranges.len() { - let j = i + 1; - - while j < ranges.len() && ranges[j].low <= ranges[i].high { - let j_high = ranges.remove(j).high; - ranges[i].high = max(ranges[i].high, j_high); + ranges.dedup_by(|a, b| { + if a.low <= b.high { + b.high = max(b.high, a.high); + true + } else { + false } - } + }); ranges } }