代码改变世界

使用Func<T>对对象进行排序

2013-01-02 14:32  哒不溜  阅读(1115)  评论(2编辑  收藏  举报

这种方法使用原理还是冒泡排序,但是他扩展的,不仅是对int类型的数据,也可以对其他的一些无法用“<”或“>”来进行排序的对象。

代码如下:

解决方案的名称:DelegateBubbleSorter

BubbleSorter.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateBubbleSorter
{
    class BubbleSorter
    {
        static public void Sort<T>(IList<T> sortArray, Func<T, T, bool> comparison)
        {
            bool swapped = true;
            do
            {
                swapped=false;
                for (int i = 0; i < sortArray.Count - 2; i++)
                {
                    if (comparison(sortArray[i + 1], sortArray[i]))
                    {
                        T temp = sortArray[i];
                        sortArray[i] = sortArray[i + 1];
                        sortArray[i + 1] = temp;
                        swapped = true;
                    }
                }
            }
            while(swapped);
        }
    }
}

Employee.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateBubbleSorter
{
    class Employee
    {
        public string Name { get; private set; }
        public decimal Salary { get; private set; }

        public Employee(string name, decimal salary)
        {
            this.Name = name;
            this.Salary = salary;
        }

        public override string ToString()
        {
            return string.Format("{0},{1:C}", Name, Salary);
        }

        public static bool CompareSalary(Employee e1, Employee e2)
        {
            return e1.Salary < e2.Salary;
        }
    }
}

调用函数:Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateBubbleSorter
{
    class Employee
    {
        public string Name { get; private set; }
        public decimal Salary { get; private set; }

        public Employee(string name, decimal salary)
        {
            this.Name = name;
            this.Salary = salary;
        }

        public override string ToString()
        {
            return string.Format("{0},{1:C}", Name, Salary);
        }

        public static bool CompareSalary(Employee e1, Employee e2)
        {
            return e1.Salary < e2.Salary;
        }
    }
}

源码都贴出来了,大家可以运行一把看看