Me gustaría ordenar mi lista con la date
propiedad.
Esta es mi clase personalizada:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Test.Web
{
public class cTag
{
public int id { get; set; }
public int regnumber { get; set; }
public string date { get; set; }
}
}
Y este es el List
que quiero ordenar:
List<cTag> Week = new List<cTag>();
Lo que quiero hacer es ordenar la Lista por la date
propiedad de la clase cTag. La fecha tiene el formato: dd.MM.yyyy.
Leí algo sobre la IComparable
interfaz, pero no sé cómo usarla.
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
se implemente.IComparable
beneficiarios de que una clase tendrá el método, pero cómo hace esa comparación depende del creador de la clase. No estoy seguro de cómo Date implementa ICompare, pero muchas veces he visto a los desarrolladores usar los parámetros de orden que se pasaron para romper un empate cuando los valores son iguales. hthTiene razón en que su clase cTag debe implementar la
IComparable<T>
interfaz. Entonces puedes simplemente llamarSort()
a tu lista.Para implementar la
IComparable<T>
interfaz, debe implementar elCompareTo(T other)
método. La forma más sencilla de hacer esto es llamar al método CompareTo del campo que desea comparar, que en su caso es la fecha.Sin embargo, esto no se ordenaría bien, porque usaría la ordenación clásica en cadenas (ya que declaró la fecha como cadena). Así que creo que lo mejor que se puede hacer sería redefinir la clase y declarar la fecha no como una cadena, sino como DateTime. El código permanecería casi igual:
Lo único que tendría que hacer al crear la instancia de la clase para convertir su cadena que contiene la fecha al tipo DateTime, pero se puede hacer fácilmente, por ejemplo, por
DateTime.Parse(String)
método.fuente
Para este caso, también puede ordenar usando LINQ:
fuente
fuente
Lo primero es lo primero, si la propiedad de fecha está almacenando una fecha, guárdela usando un DateTime. Si analiza la fecha a través de la clasificación, tiene que analizarla para cada elemento que se compara, eso no es muy eficiente ...
Luego puede hacer un IComparer:
Incluso puedes hacerlo como delegado:
fuente
Tiene razón, necesita implementar IComparable. Para hacer esto, simplemente declare su clase:
En CompareTo, simplemente implementa su algoritmo de comparación personalizado (puede usar objetos DateTime para hacer esto, pero asegúrese de verificar primero el tipo de "obj"). Para obtener más información, consulte aquí y aquí .
fuente
IComparable<T>
probablemente sería una mejor opción, ya que se verifica en lugar deIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxPuede usar linq:
fuente
mire el método Sort sobrecargado de la clase List. hay algunas formas de hacerlo. uno de ellos: su clase personalizada tiene que implementar la interfaz IComparable y luego puede usar el método Sort de la clase List.
fuente
Gracias por todas las respuestas rápidas.
Esta es mi solucion:
Gracias
fuente
fuente