Je voudrais trier ma liste avec la date
propriété.
Ceci est ma classe personnalisée:
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; }
}
}
Et c'est celui List
que je veux trier:
List<cTag> Week = new List<cTag>();
Ce que je veux faire, c'est trier la liste par la date
propriété de la classe cTag. La date est au format: jj.MM.aaaa.
J'ai lu quelque chose sur l' IComparable
interface, mais je ne sais pas comment l'utiliser.
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
est mis en œuvre.IComparable
accorde qu'une classe aura la méthode, mais comment faire cette comparaison dépend du créateur de la classe. Je ne sais pas comment Date implémente ICompare, mais j'ai souvent vu des développeurs utiliser les paramètres de commande pour rompre une égalité lorsque les valeurs sont égales. hthVous avez raison de dire que votre classe cTag doit implémenter une
IComparable<T>
interface. Ensuite, vous pouvez simplement appelerSort()
sur votre liste.Pour implémenter l'
IComparable<T>
interface, vous devez implémenter laCompareTo(T other)
méthode. Le moyen le plus simple de le faire est d'appeler la méthode CompareTo du champ que vous souhaitez comparer, qui dans votre cas est la date.Cependant, cela ne tiendrait pas bien, car cela utiliserait un tri classique sur les chaînes (puisque vous avez déclaré la date sous forme de chaîne). Je pense donc que la meilleure chose à faire serait de redéfinir la classe et de déclarer la date non pas en tant que chaîne, mais en tant que DateTime. Le code resterait presque le même:
La seule chose que vous auriez à faire lors de la création de l'instance de la classe pour convertir votre chaîne contenant la date en type DateTime, mais cela peut être fait facilement, par exemple par
DateTime.Parse(String)
méthode.la source
Dans ce cas, vous pouvez également trier à l'aide de LINQ:
la source
la source
Tout d'abord, si la propriété date stocke une date, stockez-la à l'aide d'un DateTime. Si vous analysez la date à travers le tri, vous devez l'analyser pour chaque élément comparé, ce n'est pas très efficace ...
Vous pouvez ensuite créer un IComparer:
Vous pouvez même le faire en tant que délégué:
la source
Vous avez raison - vous devez implémenter IComparable. Pour ce faire, déclarez simplement votre classe:
Dans CompareTo, vous implémentez simplement votre algorithme de comparaison personnalisé (vous pouvez utiliser des objets DateTime pour ce faire, mais assurez-vous simplement de vérifier d'abord le type de "obj"). Pour plus d'informations, voir ici et ici .
la source
IComparable<T>
serait probablement un meilleur choix, car il est vérifié de préférence àIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxVous pouvez utiliser linq:
la source
regardez la méthode de tri surchargée de la classe List. il existe des moyens d'y parvenir. l'un d'eux: votre classe personnalisée doit implémenter l'interface IComparable puis vous pouvez utiliser la méthode Sort de la classe List.
la source
Merci pour toutes les réponses rapides.
Voici ma solution:
Merci
la source
la source