diff --git a/src/uucore/src/lib/features/ranges.rs b/src/uucore/src/lib/features/ranges.rs index 06d7c510dd..bf4bb554d6 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 } }