private static IEnumerable <IGrouping <int, T> > ToGroupBy <T>(IClustering <T> engine, IEnumerable <T> source) { if (engine is null) { throw new ArgumentNullException(nameof(engine)); } else if (source is null) { throw new ArgumentNullException(nameof(source)); } Dictionary <int, List <T> > result = new(); foreach (var(item, cluster) in engine.Clusterize(source)) { if (result.TryGetValue(cluster, out var list)) { list.Add(item); } else { result.Add(cluster, new List <T>() { item }); } } int index = 0; foreach (var pair in result.OrderBy(p => p.Key)) { yield return(new Grouping <int, T>(index++, pair.Value)); } }
private void Clustering(IClustering clusterAlgorithm) { DialogResult dialogResult = openClassMethodsFile.ShowDialog(); if (dialogResult == DialogResult.OK) { string inputfile = openClassMethodsFile.FileName; Dictionary <string, List <string> > rawClasses = ClassParser.ReadClassEntities(inputfile); List <INode> clusters = initializeClusters(rawClasses); List <INode> clustered = clusterAlgorithm.Clusterize(clusters); ReloadTree(clustered[0]); } }