Tri d’une liste en C # (avec divers parameters)

J’ai une liste d’objects. Que les objects ont différents champs, par exemple l’âge et le nom

Maintenant, parfois, j’aimerais sortinger la liste par noms et parfois par âge. Ordre supplémentaire parfois croissant et parfois décroissant.

Maintenant, je comprends que je devrais implémenter l’interface Comparable dans mon object et remplacer la méthode CompareTo.

Mais comment puis-je faire cela lorsque je souhaite prendre en charge divers ordres de sorting?

Dois-je définir l’ordre de sorting dans mon object ou est-il possible de passer l’ordre de sorting par l’appel de la méthode de sorting?

L’appel de méthode peut tout faire. pas besoin de comparateur:

list.Sort((x,y)=>ssortingng.Compare(x.Name,y.Name)); list.Sort((x,y)=>y.Age.CompareTo(x.Age)); // desc list.Sort((x,y)=>x.Age.CompareTo(y.Age)); // asc 

Notez que la seconde est décroissante, en échangeant x / y dans la comparaison.

Si vous utilisez List et que vous souhaitez sortinger la liste à la place , la fonction de Sort fournit une surcharge qui accepte une Comparison . Vous pouvez l’utiliser pour fournir différentes comparaisons pour une liste.

Par exemple, pour sortinger par Age :

 list.Sort((x, y) => x.Age.CompareTo(y.Age)); 

Pour sortinger par Name :

 list.Sort((x, y) => ssortingng.Compare(x.Name, y.Name)); 

Pour sortinger par ordre décroissant, inversez simplement les parameters.

Vous pouvez également utiliser LINQ pour créer diverses requêtes sur votre liste, qui fournissent les résultats dans l’ordre de votre choix, mais cela n’aura aucun effet sur la liste sous-jacente (que ce soit mauvais ou bon, cela dépend de vous):

 var byAge = list.OrderBy(x => x.Age); var byName = list.OrderBy(x => x.Name); 

Pour sortinger par ordre décroissant, utilisez OrderByDescending à la place de OrderBy .

Vous pouvez aussi simplement utiliser LINQ pour gérer ceci:

 var sortedByAge = myList.OrderBy(i => i.Age); var sortedByName = myList.OrderBy(i => i.Name); 

Si vous souhaitez gérer le sorting sur place, vous pouvez utiliser List.Sort(Comparison) :

 // Sort by Age myList.Sort( (l, r) => l.Age.CompareTo(r.Age) ); // Sort by Name myList.Sort( (l, r) => l.Name.CompareTo(r.Name) ); 

Vous pouvez sortinger les données de vos objects avec linq

quelque chose comme ça

 var query = from cust in customers orderby cust.Age ascending select cust;