【发布时间】:2015-12-13 19:54:00
【问题描述】:
我有一个范围列表,我想知道它们是否重叠。
我有以下代码。这似乎不起作用。有没有更简单的方法或可行的方法:)
提前感谢您的任何建议。
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 并不能很好地处理随时间演变的问题——这对回答最初问题的人是不公平的,因为后来出现的任何人都会认为他们错过了重点。 (另外,我不知道其他人,但我不明白赏金中指定的要求......)
-
除了提交的答案之外,我想您可能对您描述的问题基本上是“线段相交”问题的一个实例感兴趣,最常见的是使用“扫描线算法”解决。也许阅读更多内容可以为您进一步的问题提供答案。
标签: c# .net list range intersect