2010-01-22 17 views
9

Chcę sortować listę ogólną w porządku rosnącej daty. (Framework v2)Sortuj listę ogólną

Wszelkie sugestie?

Dzięki

+0

Co znajduje się na liście? – spender

+0

Niestety, lista jest klasą z właściwością typu DateTime – chrr

Odpowiedz

14

This is a nice tutorial pokazuje, jak to zrobić.

+2

Chciałem odpowiedzieć na to samo, po prostu wspaniale, że ci delegaci, prawda? –

+1

Witryna jest wyłączona ... – Jeff

2

Stosować List<T>.Sort(), i po prostu upewnij się, że masz odpowiedni comparer.

3

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.

2

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!

+0

Dlaczego nie zaimplementować funkcji IComparable na produkcie? – stevehipwell

+0

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

+0

Jak to sortowanie według daty? –

Powiązane problemy