private IEnumerable <Employee> JoeyOrderByKeepComparer( IEnumerable <Employee> employees, ComboComparer comparer) { //new MyOrderedEnumerable(); //bubble sort var elements = employees.ToList(); while (elements.Any()) { var minElement = elements[0]; var index = 0; for (int i = 1; i < elements.Count; i++) { var element = elements[i]; if (comparer.Compare(element, minElement) < 0) { minElement = element; index = i; } } elements.RemoveAt(index); yield return(minElement); } }
private IEnumerable <Employee> JoeyOrderByLastNameAndFirstName( IEnumerable <Employee> employees, ComboComparer comboComparer) { //bubble sort var elements = employees.ToList(); while (elements.Any()) { var minElement = elements[0]; var index = 0; var finalCompareResult = 0; for (int i = 1; i < elements.Count; i++) { var employee = elements[i]; finalCompareResult = comboComparer.Compare(employee, minElement); if (finalCompareResult < 0) { minElement = employee; index = i; } } elements.RemoveAt(index); yield return(minElement); } }
public void lastName_firstname_Age() { var employees = new[] { new Employee { FirstName = "Joey", LastName = "Wang", Age = 50 }, new Employee { FirstName = "Tom", LastName = "Li", Age = 31 }, new Employee { FirstName = "Joseph", LastName = "Chen", Age = 32 }, new Employee { FirstName = "Joey", LastName = "Chen", Age = 33 }, new Employee { FirstName = "Joey", LastName = "Wang", Age = 20 }, }; var firstComparer = new CombineKeyComparer <string>(element => element.LastName, Comparer <string> .Default); var secondComparer = new CombineKeyComparer <string>(element => element.FirstName, Comparer <string> .Default); var firstCombo = new ComboComparer(firstComparer, secondComparer); var thirdComparer = new CombineKeyComparer <int>(element => element.Age, Comparer <int> .Default); var finalCombo = new ComboComparer(firstCombo, thirdComparer); var actual = JoeyOrderBy(employees, finalCombo); var expected = new[] { new Employee { FirstName = "Joey", LastName = "Chen", Age = 33 }, new Employee { FirstName = "Joseph", LastName = "Chen", Age = 32 }, new Employee { FirstName = "Tom", LastName = "Li", Age = 31 }, new Employee { FirstName = "Joey", LastName = "Wang", Age = 20 }, new Employee { FirstName = "Joey", LastName = "Wang", Age = 50 }, }; expected.ToExpectedObject().ShouldMatch(actual); }