public DataPair(DataPair dataPair) { DataSet = dataPair.DataSet; DataKey = dataPair.DataKey; DataSize = dataPair.DataSize; }
static void Main(string[] args) { Dictionary <string, List <DataPair> > dataSets = new Dictionary <string, List <DataPair> >(); List <DataPair> cache = new List <DataPair>(); Regex dataCapture = new Regex(@"^([^->|\s]+)$|^([^->|\s]+)\s->\s(\d+)\s\|\s([^->|\s]+)$"); while (true) { //Get Input string dataInput = Console.ReadLine(); if (dataInput == "thetinggoesskrra") { break; } Match dataMatch = dataCapture.Match(dataInput); if (dataMatch.Groups[1].Value != string.Empty) //Add a new dataSet { dataSets[dataMatch.Groups[1].ToString()] = new List <DataPair>(); //Add pairs from cache after new dataSet is added for (int i = 0; i < cache.Count; i++) { if (dataSets.ContainsKey(cache[i].DataSet)) { dataSets[cache[i].DataSet].Add(cache[i]); cache[i] = null; //Null added pairs to prepare for removal from cache } } //Remove pairs already added to dataSet after having been nulled cache = cache.Where(data => data != null).ToList(); } else //Add a new DataPair { string dataKey = dataMatch.Groups[2].ToString(); string dataSize = dataMatch.Groups[3].ToString(); string dataSetName = dataMatch.Groups[4].ToString(); DataPair newDataPair = new DataPair(dataSetName, dataKey, int.Parse(dataSize)); if (dataSets.ContainsKey(dataSetName)) { dataSets[dataSetName].Add(newDataPair); } else { cache.Add(newDataPair); } } } //Find largest Data Set List <DataPair> largestDataSet = new List <DataPair>(); foreach (var dataSet in dataSets) { List <DataPair> thisDataSet = dataSet.Value; if (SumSetSize(thisDataSet) > SumSetSize(largestDataSet)) { largestDataSet = thisDataSet; } } //Print the Results if (largestDataSet.Count == 0) { return; } else { Console.WriteLine($"Data Set: {largestDataSet[0].DataSet}, Total Size: {SumSetSize(largestDataSet)}"); foreach (var item in largestDataSet) { Console.WriteLine($"$.{item.DataKey}"); } } }