Comment sortinger List <List > en fonction du nombre de champs?
La liste a la structure comme
a|b|c|d|eeee|rere|ewew| ewqewq|ewew| ewew|ewewewewew|
Par sorting, j’aimerais le faire en fonction du nombre de blocs (asc / desc)
MODIFIER
la <list<list> is "items"
et j’accède à chaque liste par des éléments [0] chacun de
ces éléments [xx] est une liste qui signifie que je veux qu’ils sortingent le tableau
a|b|c|d|eeee|rere|ewew| a|b|c|d|eeee|rere a|b|c|d|eeee
Si vous n’avez pas besoin de sortinger “sur place”, vous pouvez utiliser LINQ pour vous donner une nouvelle liste sortingée.
var sorted = oldList.OrderBy( l => l.Count );
Sinon, vous devrez écrire votre propre comparaison qui prend deux listes et retourne l’ordre par leur taille.
public class CountComparer : IComparer> { #region IComparer> Members public int Compare( List x, List y ) { return x.Count.CompareTo( y.Count ); } #endregion } oldList.Sort( new CountComparer() );
Ou, comme @Josh le souligne, vous pouvez le faire avec une expression lambda.
oldList.Sort( (a,b) => a.Count.CompareTo( b.Count ) )
IMO, ce dernier fonctionne bien si la comparaison est relativement simple ou utilisée une fois, mais la classe réelle peut être préférable car la comparaison devient plus complexe ou si vous devez la répéter à plusieurs endroits.
List> list; // filled elsewhere list.Sort((x,y) => x.Count.CompareTo(y.Count););
List> ssortingngs = new List>(); // add your ssortingngs ssortingngs = new List>(from str in ssortingngs orderby str.Count select str);
Évidemment, vous pouvez adapter cela à votre scénario, mais cela devrait vous donner une idée générale de la création d’une liste sortingée par le nombre d’éléments d’une chaîne donnée dans une autre liste.
Vous pouvez sortinger à l’aide de la méthode de sorting, en créant votre propre comparateur ou en lui atsortingbuant un délégué de type Comparison
.
ls.Sort((x, y) => x.Count.CompareTo(y.Count));
Voici un exemple montrant comment comparer une expression lambda.
Un moyen très simple d’inverser le sorting consiste à multiplier par -1 négatif
ls.Sort((x, y) => -1 * x.Count.CompareTo(y.Count));
Juste un ajustement mineur, en vérifiant la nullité tout en
List> listOfLists = new List>(); List list1 = new List (); list1.Add("elem 1 1"); list1.Add("elem 1 2"); list1.Add("elem 1 3"); List list2 = new List (); list2.Add("elem 2 1"); list2.Add("elem 2 2"); list2.Add("elem 2 3"); list2.Add("elem 2 4"); listOfLists.Add(list1); listOfLists.Add(null); // list can contain nulls listOfLists.Add(list2); listOfLists.Add(null); // list can contain nulls
Lorsque vous avez des listes nulles dans la liste, vous pouvez leur donner une priorité plus basse que les listes vides, en interprétant null.Count comme -1 ou NOT
int nullListElems = -1; //int nullListElems = 0; listOfLists.Sort((l1,l2)=> l1 == null ? nullListElems : l1.Count.CompareTo( l2 == null ? nullListElems : l2.Count));