web-dev-qa-db-fra.com

Trier le tableau d'éléments à l'aide de OrderBy <>

J'ai un tableau d'articles et je voudrais trier sur l'une de leurs propriétés. Je peux accéder à la propriété des éléments en utilisant "item.Fields [" FieldName "]. Value" la propriété est renvoyée sous forme de chaîne mais je peux la convertir en un int.

J'ai jeté un œil à OrderBy <> mais je ne sais pas comment l'utiliser.

21
Zooking

Pour être clair, OrderBy ne triera pas le tableau en place - il retournera une nouvelle séquence qui est triée copie du tableau. Si ça va, alors vous voulez quelque chose comme:

var sorted = array.OrderBy(item => item.Fields["FieldName"].Value);

D'un autre côté, je ne comprends pas votre commentaire selon lequel la propriété est renvoyée sous forme de chaîne, mais que vous pouvez la convertir en entier - vous ne pouvez pas convertir des chaînes en entiers, vous devez les analyser. Si c'est ce que vous vouliez dire, vous voulez probablement:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));

Si vous le souhaitez en tant que tableau, vous pouvez appeler ToArray() par la suite:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value))
                  .ToArray();

Alternativement, vous pouvez utiliser Array.Sort Si vous voulez trier sur place, mais ce sera un peu plus compliqué.

44
Jon Skeet

Utilisez la méthode Sort pour trier un tableau:

Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value));

Si vous n'utilisez pas C # 3, vous utilisez un délégué au lieu d'une expression lambda:

Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); } );

(Cela fonctionne également avec le framework 2, ce que l'extension OrderBy ne fait pas.)

9
Guffa

Si vous pouvez utiliser la commande, cela devrait être facile, essayez ce qui suit. J'ai jeté dans l'int. Parse bien que selon la façon dont vous voulez réellement trier cela ne soit pas nécessaire.

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
5
Quintin Robinson
var sortedArray = items.OrderBy(i => i.property).ToArray();

Si vous ne voulez pas d'un tableau, vous pouvez le laisser dans ce cas, vous aurez un IEnumerable <> de type élément.

4
andleer

Il convient de mentionner que List<T>.Sort est basé sur un tri rapide et, dans la plupart des cas, ce n'est pas un tri stable.

Cette implémentation effectue un tri instable; c'est-à-dire que si deux éléments sont égaux, leur ordre risque de ne pas être conservé. En revanche, un tri stable préserve l'ordre des éléments égaux.

Cependant, vous pouvez utiliser Enumberable.OrderBy qui effectue un tri stable.

Cette méthode effectue un tri stable; c'est-à-dire que si les clés de deux éléments sont égales, l'ordre des éléments est conservé. En revanche, un tri instable ne conserve pas l'ordre des éléments qui ont la même clé.

0
Wenhan Kong