Ich habe eine Liste von Bereichen und möchte herausfinden, ob sie sich überschneiden.Überlappende Bereiche Überlappung prüfen
Ich habe den folgenden Code. Was scheint nicht zu funktionieren. Gibt es eine einfachere Möglichkeit, dies zu tun oder eine Möglichkeit, die funktioniert :)
Vielen Dank im Voraus für eine Beratung.
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; }
}
Es fühlt sich an, als ob dies eine neue Frage sein sollte, anstatt eine Prämie auf eine bestehende zu setzen. Stack Overflow funktioniert nicht wirklich gut mit Fragen, die sich im Laufe der Zeit entwickeln - es ist nicht fair für Leute, die die erste Frage beantwortet haben, da jeder, der später kommt, denkt, dass sie den Punkt verpasst haben. (Ich kenne auch niemanden sonst, aber ich verstehe die in der Bounty angegebenen Anforderungen nicht ...) –
Abgesehen von den vorgelegten Antworten denke ich, dass Sie vielleicht daran interessiert sind, dass das von Ihnen beschriebene Problem im Grunde ein ist Beispiel für das Problem "Liniensegmentüberschneidung", am häufigsten gelöst mit "Sweep-Line-Algorithmus".Vielleicht können Sie mehr darüber lesen, um Antworten auf Ihre weiteren Fragen zu finden. – Grx70