dire que j'ai une liste d'objets de personne: Comment triera-i de cette liste par l'autre nom? p> List<Person> myPeople = GetMyPeople();
myPeople.Sort(/* what goes here? */);
7 Réponses :
Sous C # 3.0 Vous pouvez utiliser l'instruction LINQ suivante:
var sortedEnumerable = myPeople.OrderBy( p => p.LastName );
Un Icomarer iEnumerable
Une option consiste à écrire un comparateur:
myPeople.Sort((p1, p2) => String.Compare(p1.LastName, p2.LastName));
Comme d'autres personnes ont suggéré, vous pouvez utiliser une personnalisation iComparer méthode pour trier votre liste. Si vous ne le faites qu'une fois, le moyen le plus simple utilise une méthode anonyme, comme si telle: alternativement, vous pouvez implémenter Icomparable sur votre classe de votre personne, de sorte que la classe sait comment trier lui-même: P> class Person : IComparable<Person>
{
int id;
string FirstName;
string LastName;
public int CompareTo(Person other)
{
return LastName.CompareTo(other.LastName);
}
}
Si vous ne souhaitez pas modifier la liste réelle, mais que vous voulez énumérer sur son contenu dans un ordre trié, alors, comme d'autres ont suggéré, utilisez La méthode d'extension LINQ Liste < T> code> délégué : OrderBy CODE> A > (.NET 3.5 et plus) à la place. Cette méthode peut prendre un simple Func
Meilleure réponse jusqu'à présent. Son ennuyeux de créer un IComparer pour chaque propriété que vous souhaitez trier.
Il existe également une méthode ordectebydescendante à Linq si c'est l'ordre dont vous avez besoin.
Rien n'a besoin d'aller à l'intérieur de votre méthode "Tri" Capt de la méthode Si votre classe implémente Cochez cette page Link pour détail. p> code: p> icomparable code>. class person : IComparable<person>
{
int id;
string FirstName;
string LastName;
public int CompareTo(person other)
{
//If you want to sort on FirstName
return FirstName.CompareTo(other.FirstName);
}
}
Exemple d'ICOMPARE
/// <summary>
/// Sort class on LastName Descending Order
/// </summary>
private class PersonLastNameDescending : IComparer<Person>
{
public int Compare(Person aX, Person aY)
{
return aY.LastName.CompareTo(aX.LastName);
} // end Compare(...)
} // end inner class PersonLastNameDescending
MyPeople.Sort(new PersonLastNameDescending());
Duplicaté: Stackoverflow. com / questions / 3062373 / ...