using System.Collections.Generic;
static List<string> myList = new List<string>(){
"CookieMaker_TransportSettingsManual",
"CookieMaker_TransportSettingsParameters",
"Cookie_WrapperSettings",
"Cookie_WrapperSettingsManual",
"Cookie_WrapperSettingsParameters",
"Cookie_ProfileBendSettings",
"Cookie_ProfileBendSettingsParameters",
"Cookie_HopperSettingsManual",
"Cookie_HopperSettingsParameters",
"Cookie_CutterSettingsManual",
"Cookie_CutterSettingsParameters",
"General_SpeedSettingManual",
"General_SpeedSettingSettings",
"General_CalibrationSettings",
"General_CalibrationSettingsCalibration",
"Bonbon_VerticalAligner",
"Bonbon_VerticalTransporter",
"Bonbon_HorizontalHopper",
"Bonbon_HorizontalManual",
"Bonbon_HorizontalCookie",
"Bonbon_HorizontalTransporter",
"Bonbon_CompensatorCarriage",
"Bonbon_CompensatorHopper",
"Bonbon_CompensatorManual",
"Bonbon_CollectingUnitManual",
"Bonbon_CollectingUnitTransporter",
"Bonbon_CollectingUnitTubeMaker",
"CookieMaker_TransportSettings",
"CookieMaker_TransportSettingsBonbon",
"CookieMaker_TransportSettingsPandora"
static Dictionary<string, List<string>> results = new Dictionary<string, List<string>>();
public static void Main()
var orderedList = myList.OrderBy(i=>i).ToList();
Console.WriteLine(myList.Count);
var prefix = orderedList[i];
results[prefix] = new List<string>();
if(++i >= myList.Count) break;
while(orderedList[i].Contains(prefix)){
results[prefix].Add(orderedList[i]);
if(i >= orderedList.Count) {
private static void Print(){
foreach (string prefix in results.Keys)
Console.WriteLine($"Prefix =>{prefix} - {results[prefix].Count}");
foreach (string result in results[prefix])
Console.WriteLine($" ======>{result}");