日期:2014-05-18  浏览次数:20851 次

C#数据区间合并问题
最近在做项目的时候遇到一个这样的问题:

list<point>类型中存入了很多区间,Point.x存入的是开始位置,Point.Y存入的是结束位置。list<point>中存入了很多这样的

点,例如1--4,3---8,9--20,17--25.

现在的问题是要把这些重合的段落从新合并成一个区间,例如上边四个区间应该合并为:1--8和9--25两个区间从新添加到

List<point>中,请问各位大侠有什么好的办法没?

------解决方案--------------------
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Point> data = new List<Point>()
            {
                new Point() { X = 1, Y = 4 },
                new Point() { X = 3, Y = 8 },
                new Point() { X = 9, Y = 20 },
                new Point() { X = 17, Y = 25 }
            };
            data.ForEach(x =>
            {
                if (data.Where(y => y != x).Any(y => y.X <= x.Y && y.Y >= x.X))
                {
                    var desc = data.Where(y => y != x).First(y => y.X <= x.Y && y.Y >= x.X);
                    x.X = desc.X > x.X ? x.X : desc.X;
                    x.Y = desc.Y > x.Y ? desc.Y : x.Y;
                }
            });
            data = data.GroupBy(x => new { x.X, x.Y }).Select(x => new Point() { X = x.Key.X, Y = x.Key.Y }).ToList();
            foreach (var item in data)
            {
                Console.WriteLine(item);
            }
        }
    }
    class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
        public override string ToString()
        {
            return string.Format("X = {0}, Y = {1}.", X, Y);
        }
    }
}