Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

40,023 questions

51,974 answers

573 users

How to merge overlapping ranges (start,end),(start,end) in C#

2 Answers

0 votes
using System;
using System.Collections.Generic;
using System.Linq;

public class Range
{
    public int Start { get; set; }
    public int End { get; set; }

    public Range(int start, int end) {
        Start = start;
        End = end;
    }
}

class Program
{
    static List<Range> MergeRanges(List<Range> ranges)
    {
        // Sort by Start
        var sorted = ranges.OrderBy(r => r.Start).ToList();
        var merged = new List<Range>();

        foreach (var r in sorted) {
            if (merged.Count == 0 || r.Start > merged[merged.Count - 1].End) {
                merged.Add(new Range(r.Start, r.End));
            }
            else {
                var last = merged[merged.Count - 1];
                last.End = Math.Max(last.End, r.End);
            }
        }

        return merged;
    }

    static void Main()
    {
        var ranges = new List<Range>
        {
            new Range(302, 447),
            new Range(488, 489),
            new Range(121, 234),
            new Range(200, 421),
            new Range(140, 354)
        };

        var result = MergeRanges(ranges);

        foreach (var r in result) {
            Console.WriteLine("(" + r.Start + ", " + r.End + ")");
        }
    }
}



/*
run:

(121, 447)
(488, 489)

*/

 



answered Jan 26 by avibootz
0 votes
using System;
using System.Collections.Generic;
using System.Linq;

public struct Range
{
    public int StartVal;
    public int EndVal;

    public Range(int s, int e) {
        StartVal = s;
        EndVal = e;
    }
}

public static class Program
{
    public static List<Range> MergeRanges(List<Range> ranges) {
        var sorted = ranges
            .OrderBy(r => r.StartVal)
            .ToList();

        var merged = new List<Range>();

        foreach (var r in sorted) {
            if (merged.Count == 0 || r.StartVal > merged[^1].EndVal) {
                merged.Add(new Range(r.StartVal, r.EndVal));
            }
            else {
                var last = merged[^1];
                last.EndVal = Math.Max(last.EndVal, r.EndVal);
                merged[^1] = last;
            }
        }

        return merged;
    }

    public static void Main()
    {
        var ranges = new List<Range>
        {
            new Range(302, 447),
            new Range(488, 489),
            new Range(121, 234),
            new Range(200, 421),
            new Range(140, 354)
        };

        var result = MergeRanges(ranges);

        foreach (var r in result) {
            Console.WriteLine($"({r.StartVal}, {r.EndVal})");
        }
    }
}




/*
run:

(121, 447)
(488, 489)

*/

 



answered Jan 26 by avibootz
...