考慮一類Rectangle
由角定義了一個區域:使用的GroupBy到分區設置的重疊範圍
public class Rectangle {
public int X1 { get; set; }
public int Y1 { get; set; }
public int X2 { get; set; }
public int Y2 { get; set; }
}
可以說兩個Rectangle
對象Overlap
如果他們有共同的任何區域。下面是實現Overlap
邏輯的簡單方法:
public bool Overlaps(Rectangle other) {
return (this.X1 < other.X2 && this.X2 > other.X1 &&
this.Y1 < other.Y2 && this.Y2 > other.Y1);
}
現在我想要一套Rectangle
對象分成重疊的矩形組。值得注意的是,組中的某些矩形可能不一定與同一組中的其他矩形重疊,只要它們共享其他重疊的矩形。結果總是定義良好,但沒有從矩形到最終重疊組的直接映射。
看起來很直觀,應該可以使用GroupBy
構建重疊矩形組。但是,沒有定義矩形是否屬於同一個組的「鍵」重要的是它們是否重疊。使用GroupBy
可以解決這個問題,即使這意味着遞歸分組,直到所有適當的組被合併爲止?