public static IEnumerable <Tuple <string, int> > GetTopWordsByColumn(List <PersonName> personNameList, ColumnsEnum column, int iRank, bool isDescending) { Func <PersonName, string> getPersonProperty = GetFunctionStrategy(column); Dictionary <string, int> wordCountDictionary = new Dictionary <string, int>(); personNameList.ForEach(personName => { GetWordCount(getPersonProperty(personName), wordCountDictionary); }); var wordCounts = wordCountDictionary.Select(e => new Tuple <string, int>(e.Key, e.Value)); wordCounts = isDescending ? wordCounts.OrderByDescending(t => t.Item2) : wordCounts.OrderBy(t => t.Item2); return(wordCounts.Take(iRank)); }
static void PrintTopByField(List <PersonName> personNames, ColumnsEnum column, int iRank, bool isDescending, bool useWholeWord = true) { IEnumerable <Tuple <string, int> > topNames = useWholeWord ? NameAnalyzer.GetTopByColumn(personNames, column, iRank, isDescending) : NameAnalyzer.GetTopWordsByColumn(personNames, column, iRank, isDescending); Console.WriteLine($"------------------{(isDescending ? "TOP" : "LAST") } {iRank } BY {((object)column).ToString()} "); if (topNames != null) { foreach (var topName in topNames) { Console.WriteLine($"{topName.Item1}: {topName.Item2}"); } } }
private DataTable PrepareDataTable(string tableName, ColumnsEnum selectedColumn, object value) { var table = new DataTable(tableName); table.Columns.Add(Enum.GetName(typeof(ColumnsEnum), ColumnsEnum._int), typeof(int)); table.Columns.Add(Enum.GetName(typeof(ColumnsEnum), ColumnsEnum._varChar3), typeof(string)); var row = table.NewRow(); row[(int)selectedColumn] = value; table.Rows.Add(row); return(table); }
private static Func <PersonName, string> GetFunctionStrategy(ColumnsEnum column) { Func <PersonName, string> getPersonProperty = (x) => x.FirstName; switch (column) { case ColumnsEnum.FirstLastName: getPersonProperty = (x) => x.FirstLastName; break; case ColumnsEnum.SecondLastName: getPersonProperty = (x) => x.SecondLastName; break; } return(getPersonProperty); }
public static IEnumerable <Tuple <string, int> > GetTopByColumn(List <PersonName> personNameList, ColumnsEnum column, int iRank, bool isDescending) { Func <PersonName, string> getPersonProperty = GetFunctionStrategy(column); var groups = personNameList.GroupBy(getPersonProperty, new StringComparer()); groups = isDescending ? groups.OrderByDescending(g => g.Count()) : groups.OrderBy(g => g.Count()); return(groups.Take(iRank).Select(g => new Tuple <string, int>(g.Key, g.Count())).ToList()); }