Chcę sortować listę ogólną w porządku rosnącej daty. (Framework v2)Sortuj listę ogólną
Wszelkie sugestie?
Dzięki
Chcę sortować listę ogólną w porządku rosnącej daty. (Framework v2)Sortuj listę ogólną
Wszelkie sugestie?
Dzięki
This is a nice tutorial pokazuje, jak to zrobić.
Chciałem odpowiedzieć na to samo, po prostu wspaniale, że ci delegaci, prawda? –
Witryna jest wyłączona ... – Jeff
Stosować List<T>.Sort()
, i po prostu upewnij się, że masz odpowiedni comparer.
Upul i Wim mówi wszystko:
Stosować delegatów:
new List<DateTime>().Sort(delegate(DateTime d1, DateTime d2) {
return d1.CompareTo(d2);
});
Lub jeśli masz klasę lub coś, co głosi, że datetime:
new List<Nhonho>().Sort(delegate(Nhonho n1, Nhonho n2) {
return n1.date.CompareTo(n2.date);
});
Aby uczynić go zmniejszenia,
new List<Nhonho>().Sort(delegate(Nhonho n1, Nhonho n2) {
return n2.date.CompareTo(n1.date);
});
Powodzenia.
Hej! W tym scenariuszu sugerowałbym coś bardzo podobnego, ale moim zdaniem lepszy sposób na rozwiązanie tego problemu.
Zaimplementowałbym nowe zajęcia, których jedynym "buszującym" jest posiadanie określonej "strategii" sortowania. Na przykład; Chciałbym utworzyć "ProductNameComparer" i "ProductPriceComparer", te klasy powinny implementować interfejs IComparer, a następnie nazwałbym metodę sortującą przekazującą te strategie jako parametry. Możesz sprawdzić kod, który właśnie zrobiłem, aby zobrazować mój 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());
}
To, co mamy dostać, to;
PRODUKTY wg ceny wyrobu P ($ 5,14) Produkt D ($ 12,80) Produkt A ($ 25,19) Z produktu ($ 45,98) Produkt B ($ 65,00)
sortowanych produktów Według nazwy produktu A ($ 25,19) Produkt B ($ 65,00) Produkt D ($ 12,80) produktu P ($ 5,14) Z produktu ($ 45,98)
Myślę, że to pomoże! Do zobaczenia!
Dlaczego nie zaimplementować funkcji IComparable na produkcie? – stevehipwell
Jeśli to zrobię, będę zawsze związany z jedną metodą sortowania. I może pojawić się poważny problem, gdy używam dużo "jeśli", aby zmodyfikować sposób, w jaki chcę sortować (sugerować, że problemy z powtarzalnością). Zauważ, że implementacja programu IComparer w klasach, w których występuje tylko funkcja pourporse, to nic innego, jak użycie wzorca strategii projektowania (GoF). – user256680
Jak to sortowanie według daty? –
Co znajduje się na liście? – spender
Niestety, lista jest klasą z właściwością typu DateTime – chrr