Eu gostaria de ordenar minha lista com a date
propriedade.
Esta é minha classe 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; }
}
}
Este é o List
que eu quero classificar:
List<cTag> Week = new List<cTag>();
O que eu quero fazer é classificar a lista pela date
propriedade da classe cTag. A data está no formato: dd.MM.aaaa.
Eu li algo sobre a IComparable
interface, mas não sei como usá-la.
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
é implementado.IComparable
outorgados que uma classe terá o método, mas como ele faz essa comparação depende do criador da classe. Não tenho certeza de como Date implementa ICompare, mas muitas vezes tenho visto desenvolvedores usarem os parâmetros de ordem que foram passados para quebrar um empate quando os valores são iguais. hthVocê está correto ao dizer que sua classe cTag deve implementar
IComparable<T>
interface. Então você pode simplesmente ligarSort()
em sua lista.Para implementar a
IComparable<T>
interface, você deve implementar oCompareTo(T other)
método. A maneira mais fácil de fazer isso é chamar o método CompareTo do campo que você deseja comparar, que no seu caso é a data.No entanto, isso não classificaria bem, porque isso usaria a classificação clássica em strings (já que você declarou a data como string). Então eu acho que a melhor coisa a fazer seria redefinir a classe e declarar a data não como string, mas como DateTime. O código permaneceria quase o mesmo:
A única coisa que você teria que fazer ao criar a instância da classe para converter sua string contendo a data para o tipo DateTime, mas pode ser feito facilmente, por exemplo, por
DateTime.Parse(String)
método.fonte
Neste caso, você também pode classificar usando LINQ:
fonte
fonte
Em primeiro lugar, se a propriedade de data estiver armazenando uma data, armazene-a usando um DateTime. Se você analisar a data por meio da classificação, terá que analisá-la para cada item sendo comparado, isso não é muito eficiente ...
Você pode então fazer um IComparer:
Você pode até fazer isso como um delegado:
fonte
Você está certo - você precisa implementar IComparable. Para fazer isso, basta declarar sua classe:
Em CompareTo, você apenas implementa seu algoritmo de comparação personalizado (você pode usar objetos DateTime para fazer isso, mas certifique-se de verificar o tipo de "obj" primeiro). Para mais informações, veja aqui e aqui .
fonte
IComparable<T>
provavelmente seria uma escolha melhor, já que é verificado em preferência aIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxVocê pode usar o linq:
fonte
observe o método Sort sobrecarregado da classe List. existem algumas maneiras de fazer isso. um deles: sua classe personalizada tem que implementar uma interface IComparable, então você pode usar o método Sort da classe List.
fonte
Obrigado por todas as respostas rápidas.
Esta é a minha solução:
obrigado
fonte
fonte