Sort Generic List

后端 未结 3 740
野性不改
野性不改 2021-02-08 09:57

I want to sort a Generic List in Ascending Date order. (Framework v2)

Any suggestions?

相关标签:
3条回答
  • 2021-02-08 10:32

    Upul and Wim said it all:
    Use delegates:

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

    Or if you have a class or something that holds that datetime:

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

    To make it lessening,

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

    Good luck.

    0 讨论(0)
  • Use List<T>.Sort(), and just make sure you have an appropriate comparer.

    0 讨论(0)
  • 2021-02-08 10:37

    For this scenario I would suggest something quite similar but in my opinion a better way to solve this problem.

    I would implement new classes that their only pourpouse is to have a particular sorting "strategy". For example; I would create "ProductNameComparer" and "ProductPriceComparer", these classes should implement IComparer interface, then I would only call the method sort passing these strategies as parameters. You may check the code I have just made to ilustrate my ponit;

    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());
        }
    

    What we are supossed to get is:

    PRODUCTS SORTED BY PRICE
    Product P ($5,14)
    Product D ($12,80)
    Product A ($25,19)
    Product Z ($45,98)
    Product B ($65,00)
    

    PRODUCTS SORTED BY NAME
    Product A ($25,19)
    Product B ($65,00)
    Product D ($12,80)
    Product P ($5,14)
    Product Z ($45,98)
    

    I think it will help.

    0 讨论(0)
提交回复
热议问题