示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }