【发布时间】:2020-12-27 21:08:53
【问题描述】:
我想按日期升序对通用列表进行排序。 (框架 v2)
有什么建议吗?
【问题讨论】:
-
抱歉,列表属于具有 DateTime 类型属性的类
我想按日期升序对通用列表进行排序。 (框架 v2)
有什么建议吗?
【问题讨论】:
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);
});
祝你好运。
【讨论】:
使用List<T>.Sort(),并确保您有合适的比较器。
【讨论】:
对于这种情况,我会建议一些非常相似的方法,但我认为这是解决此问题的更好方法。
我会实现新的类,它们唯一的作用就是拥有特定的排序“策略”。例如;我会创建“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());
}
我们应该得到的是:
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)
我认为这会有所帮助。
【讨论】: