If you are handling different 'Layers, each of which contains 'Polygons. I suggest you create classes or data-structures to keep track of them: then, you can easily access summary information using Linq.
using System.Collections.Generic;
using System.Linq;
namespace YourNameSpace
{
public class LayerManager
{
public string Name { get; }
public List<Layer> Layers { get; }
public LayerManager(string lmname = "")
{
Name = lmname;
Layers = new List<Layer>();
}
public Layer AddLayer(string lname)
{
Layer newlayer = new Layer(lname);
Layers.Add(newlayer);
return newlayer;
}
public void RemovePolygon(Layer layer)
{
if (Layers.Contains(layer)) Layers.Remove(layer);
}
public IEnumerable<Layer> SortLayersByMaxPolySize()
{
return Layers.OrderByDescending(lyr => lyr.MaxPoly.Area);
}
}
public class Layer
{
public string Name { get; }
public List<Polygon> Polygons;
public Layer(string lname)
{
Name = lname;
Polygons = new List<Polygon>();
}
public Polygon MinPoly = null;
public Polygon MaxPoly = null;
public Polygon AddPolygon(Polygon poly)
{
Polygons.Add(poly);
if (MinPoly == null)
{
MinPoly = poly;
MaxPoly = poly;
}
else if (poly.Area < MinPoly.Area)
{
MinPoly = poly;
}
else if (poly.Area > MaxPoly.Area)
{
MaxPoly = poly;
}
return poly;
}
public void RemovePolygon(Polygon poly)
{
if(Polygons.Contains(poly)) Polygons.Remove(poly);
}
}
public class Polygon
{
public string Name { get; }
public double Area { set; get; }
public Polygon(string pname, double area = 0.0)
{
Name = pname;
Area = area;
}
}
}
Usage example in some method:
LayerManager lmanager = new LayerManager("lman 1");
for (int i = 0; i < 5; i++)
{
Layer newlayer = lmanager.AddLayer($"layer_{i}");
for (int j = 0; j < 5; j++)
{
double area = i * 20 + j * 20;
newlayer.AddPolygon(new Polygon($"poly_{i},{j}", area));
}
}
double maxmax = lmanager.Layers.Max(lyr => lyr.MaxPoly.Area);
double minmin = lmanager.Layers.Min(lyr => lyr.MinPoly.Area);
List<Layer> lyrsbymax = lmanager.SortLayersByMaxPolySize().ToList();