排序通用列表
回答
This is a nice tutorial它告訴你如何去做。
我打算回答同樣的問題,這些代表很棒,不是嗎? – 2010-01-22 11:23:17
該網站已關閉... – Jeff 2017-10-10 14:49:56
使用List<T>.Sort()
,只是確保你有適當的比較器。
Upul和維姆說,這一切:
使用委託:
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);
});
祝你好運。
嘿傢伙!對於這種情況,我會建議一些非常相似的東西,但在我看來,這是解決這個問題的更好方法。
我會實現新的類,他們唯一的傾盆大雨是有一個特定的排序「戰略」。例如;我會創建「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());
}
我們被要求得到的是;
產品一般篩選PRICE 產品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)
我認爲它會幫助!再見!
爲什麼不直接在產品上實現IComparable? – stevehipwell 2010-01-22 13:08:26
如果我這樣做,我會一直只有一種排序方法。當我使用大量「if」來修改我想要排序的方式時(可能導致可重定性問題),我可能會遇到嚴重問題。請注意,在僅具有這種傾向的類中實現IComparer只不過是使用了策略設計模式(GoF)。 – user256680 2010-01-22 13:26:00
按日期排序如何? – 2011-11-25 01:11:15
- 1. 通過排序列表列
- 2. NullPointerException通過排序列表
- 3. 對通用類型列表排序 - Java
- 4. C#中的通用列表排序#
- 5. 通過按列排列選擇排序列表
- 6. 根據不同的列表對通用列表排序
- 7. 通過排序字典在python通過使tuplles排序列表不起作用
- 8. 排序列表
- 9. 排序列表
- 10. 列表排序
- 11. 排序列表
- 12. 排序列表
- 13. 排序列表
- 14. 排序列表
- 15. 排序列表
- 16. 排序列表
- 17. 排序列表
- 18. 排序列表
- 19. 排序列表
- 20. 排序列表
- 21. 排序列表
- 22. 列表排序
- 23. 排序列表
- 24. 排序列表
- 25. 排序列表
- 26. 通過多列列排序
- 27. lisp通過函數排序列表
- 28. 創建列表進行排序,通過
- 29. 通過嵌套列表排序
- 30. 通過Rails中的表格列排序
什麼是在列表中? – spender 2010-01-22 11:08:04
對不起,該列表屬於帶DateTime類型屬性的類 – chrr 2010-01-22 11:13:28