我有一个范围列表,我想知道它们是否重叠。重叠范围检查重叠
我有以下代码。这似乎没有工作。有没有一个更简单的方法来做到这一点或作品:)
在此先感谢您的任何建议。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private IList<Range> rangeList;
private void Form1_Load(object sender, EventArgs e)
{
rangeList.Add(new Range{FromNumber = 0, ToNumber = 100});
rangeList.Add(new Range { FromNumber = 101, ToNumber = 200 });
// this range should over lap and throw an exception
rangeList.Add(new Range { FromNumber = 199, ToNumber = 300 });
}
private bool RangesOverlap()
{
var bigList = new List<List<int>>();
foreach (var range in this.rangeList)
{
bigList.Add(new List<int> { range.FromNumber , range.ToNumber });
}
IEnumerable<IEnumerable<int>> lists = bigList;
return lists
.Where(c => c != null && c.Any())
.Aggregate(Enumerable.Intersect)
.ToList().Count > 0;
}
}
public class Range
{
public int FromNumber { get; set; }
public int ToNumber { get; set; }
}
感觉这应该是一个新的问题,而不是现有的赏金。随着时间的推移,Stack Overflow并不能很好地解决问题 - 对于那些回答最初问题的人来说,这是不公平的,因为后来的任何人都会认为他们错过了这一点。 (另外,我不知道其他人,但我不明白在赏金规定的要求...) –
除了提交的答案,我认为你可能会对你描述的问题基本上是一个事实感兴趣“线段交点”问题的实例,最常用“扫描线算法”解决。也许更多地阅读它可以为您的进一步问题提供答案。 – Grx70