排序通用列表

时间:2010-01-22 11:05:46

标签: c# .net generics

我想按升序日期顺序对通用列表进行排序。 (框架v2)

有什么建议吗?

由于

4 个答案:

答案 0 :(得分:14)

This is a nice tutorial它会告诉您如何操作。

答案 1 :(得分:3)

Upul和Wim说了这一切:
使用代表:

new List<DateTime>().Sort(delegate(DateTime d1, DateTime d2) {
    return d1.CompareTo(d2);
});

或者,如果您有一个类或具有该日期时间的东西:

new List<Nhonho>().Sort(delegate(Nhonho n1, Nhonho n2) {
    return n1.date.CompareTo(n2.date);
});

为了减少,

new List<Nhonho>().Sort(delegate(Nhonho n1, Nhonho n2) {
    return n2.date.CompareTo(n1.date);
});
祝你好运。

答案 2 :(得分:2)

使用List<T>.Sort(),并确保您拥有合适的比较器。

答案 3 :(得分:2)

嘿伙计们!对于这种情况,我会建议一些非常相似的东西,但在我看来,这是解决这个问题的更好方法。

我会实现新的类,他们唯一的pourpouse是具有特定的排序“策略”。例如;我会创建“ProductNameComparer”和“ProductPriceComparer”,这些类应该实现IComparer接口,然后我只调用方法sort将这些策略作为参数传递。你可以查看我刚才做的代码来说明我的意思;

public class ProductPriceComparer : IComparer<Product>
    {
        public int Compare(Product x, Product y)
        {
            if (x.Price > y.Price)
                return 1;

            if (x.Price < y.Price)
                return -1;

            return 0;
        }
    }

    public class ProductNameComparer : IComparer<Product>
    {
        public int Compare(Product x, Product y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }

    public class Product
    {
        public Product(String name, Decimal price)
        {
            this.name = name;
            this.price = price;
        }

        private String name;
        public String Name
        {
            get { return name; }
            set { name = value; }
        }

        private Decimal price;
        public Decimal Price
        {
            get { return price; }
            set { price = value; }
        }

        public override string ToString()
        {
            return Name + " ($"+ Price.ToString() + ")";
        }
    }

    static void Main(string[] args)
    {
        List<Product> products = new List<Product>();
        products.Add(new Product("Product Z", 45.98m));
        products.Add(new Product("Product D", 12.80m));
        products.Add(new Product("Product A", 25.19m));
        products.Add(new Product("Product B", 65.00m));
        products.Add(new Product("Product P", 5.14m));

        Console.WriteLine("PRODUCTS SORTED BY PRICE");
        products.Sort(new ProductPriceComparer());
        foreach (Product p in products)
            Console.WriteLine(p.ToString());

        Console.WriteLine("\n--------------------------------\n");

        Console.WriteLine("PRODUCTS SORTED BY NAME");
        products.Sort(new ProductNameComparer());
        foreach (Product p in products)
            Console.WriteLine(p.ToString());
    }

我们得到的是;

按价格分类的产品 产品P($ 5,14) 产品D($ 12,80) 产品A(25,19美元) 产品Z($ 45,98) 产品B($ 65,00)


名称分类的产品 产品A(25,19美元) 产品B($ 65,00) 产品D($ 12,80) 产品P($ 5,14) 产品Z($ 45,98)

我认为它会有所帮助!见啊!