using System.Collections.Generic; namespace DbscanImplementation.ResultBuilding { public class DbscanResultBuilder { public DbscanResult Result { get; private set; } public DbscanResultBuilder() { Result = new DbscanResult(); } public void Process(DbscanPoint point) { if (point.ClusterId.HasValue && !Result.Clusters.ContainsKey(point.ClusterId.Value)) { Result.Clusters.Add(point.ClusterId.Value, new List>()); } switch (point) { case DbscanPoint core when core.PointType == PointType.Core: Result.Clusters[core.ClusterId.Value].Add(core); break; case DbscanPoint border when border.PointType == PointType.Border: Result.Clusters[border.ClusterId.Value].Add(border); break; case DbscanPoint noise when noise.PointType == PointType.Noise: Result.Noise.Add(noise); break; } } } }