Comment sortinger List <List > en fonction de List nombre de champs?

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.

modifier

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));