2009-03-06 10 views
20

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

Je jetais un oeil à OrderBy <> mais je n'ai aucune idée de comment l'utiliser.

Répondre

41

Pour être clair, OrderBy ne triera pas le tableau en place - il renverra une nouvelle séquence triée du tableau. Si c'est correct, alors vous voulez quelque chose comme:

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

D'autre part, je ne comprends pas votre commentaire que la propriété est retourné comme une chaîne, mais que vous pouvez jeter un int - vous Vous ne pouvez pas lancer des ficelles sur les ints, 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 voulez que comme un tableau, vous pouvez appeler ToArray() après:

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

Sinon, vous pouvez utiliser Array.Sort si vous voulez trier in- lieu, mais ce sera un peu plus en désordre.

+0

@skeet je suis confronté à presque le même problème et j'ai posté une question aussi http://stackoverflow.com/questions/11693827/sorting-on-generic-list-after -using-toarray-method – rahularyansharma

+0

Merci, Jon. Bon à savoir c'est une opération non-destructive –

+0

quelle bibliothèque devez-vous inclure à l'utilisateur 'OrderBy'? – AlbatrossCafe

5

Si vous pouvez utiliser orderby il devrait être facile, essayez ce qui suit. J'ai jeté le int.Parse, mais en fonction de la façon dont vous voulez réellement trier cela ne peut pas être nécessaire.

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

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

7

Utilisez la méthode de tri pour trier un tableau:

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

Si vous ne l'utilisez 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 aussi avec framework 2, que l'extension OrderBy ne fait pas.)

+0

une ligne de code, pas de variables supplémentaires. cela devrait vraiment être la réponse. – toddmo

Questions connexes