2011-01-14 4 views

Répondre

6

Vous pouvez trier la matrice en utilisant.

var sortedstrings = myStringArray.OrderBy(s => s); 

Ceci renverra une instance de Ienumerable. Si vous devez le conserver en tant que tableau, utilisez plutôt ce code.

myStringArray = myStringArray.OrderBy(s => s).ToArray(); 

Je ne suis pas sûr de ce que vous faites référence lorsque vous avez dit que vous devez mettre en œuvre certaines interfaces, mais vous ne devez pas le faire lors de l'utilisation du IEnumerable.OrderBy. Il suffit de passer un Func<TSource, TKey> sous la forme d'une expression lambda.

+0

ok, mais qu'est-ce que "s"? – aharon

+0

@aharon: C'est le paramètre de l'expression lambda. Si vous allez apprendre LINQ, vous aurez besoin de connaître les différentes fonctionnalités de C# 3. –

+0

Nit: vous ne passez pas un 'Predicate ' dans OrderBy - vous passez un 'Func '. –

2

OrderBy ne triera pas le tableau existant en place. Si vous avez besoin de faire cela, utilisez Array.Sort.

OrderBy retourne toujours une nouvelle séquence - qui bien sûr vous pouvez convertir en un tableau et stocker une référence dans la variable d'origine, selon la réponse de Øyvind.

2

Pour trier à l'intérieur de un tableau existant, appelez Array.Sort(theArray). Reportez-vous à votre commentaire sur les interfaces: vous n'avez pas besoin d'ajouter d'interfaces ici, car string est bien supporté; mais pour personnalisé types (de votre choix), vous pouvez implémenter IComparable/IComparable<T> pour activer le tri. Vous pouvez aussi faire la même chose en passant dans un IComparer/IComparer<T>, si vous voulez (ou avez besoin) du code qui donne l'ordre d'être séparé du type lui-même.

0

Linq dispose de deux méthodes (de syntaxe) pour trier un tableau de chaînes.

1:

string[] sortedStrings = unsortedStrings.OrderBy(s => s).ToArray(); 

Cette syntaxe utilise un Lambda Expressions si vous ne savez pas ce que s => s moyens.

2:

sortedStrings = (from strings in unsortedStrings 
       orderby strings 
       select strings).ToArray(); 

Cet exemple ressemble un peu à une instruction SQL et est probablement plus facile à lire si vous êtes nouveau avec LINQ.

ToArray() convertit le IOrderedEnumerable<string> en tant que string[] dans ce cas.

+0

de quel type est le non trié? J'ai essayé avec string [], ne fonctionne pas ...? – BerggreenDK

+0

string [] test = new [] {"3", "1", "c"}; devrait fonctionner sans problèmes. Vous devez inclure l'espace de noms System.Linq – hwcverwe