Ordina array di stringhe in base alla lunghezza dell’elemento

Avere una serie di stringhe come posso aggiornarlo in modo che i suoi elementi siano ordinati in base alla sua lunghezza.

stavo provando

string[] arr = {"aa","ss","a","abc"}; arr = arr.OrderBy(aux => aux.Length); 

Quindi, otterrei a,aa,ss,abc , ma dice

non può convertire implicitamente il tipo ‘system.linq.iorderedenumerable a string []’

Quindi, stavo facendo

 foreach (string s in arr.OrderBy(str => str.Length)) { // } 

C’è un altro modo per farlo?

Poiché arr è un array, puoi utilizzare il comodo metodo Array.Sort :

 Array.Sort(arr, (x, y) => x.Length.CompareTo(y.Length)); foreach (string s in arr) { ... } 

Questo è più efficiente di OrderBy poiché ordina gli elementi dell’array in luogo anziché creare una nuova raccolta da enumerare.

OrderBy restituisce IEnumerable , non un array. Utilizzare il metodo ToArray per ottenere un array:

 arr = arr.OrderBy(aux => aux.Length).ToArray(); 

Tuttavia, non ordinerà l’array sorgente. Invece di quello, ne creerà uno nuovo con gli oggetti ordinati e sostituirà il riferimento. Se hai bisogno di ordinamento sul posto (ad es. Quando l’array viene anche referenziato altrove) usa il metodo Array.Sort :

 Array.Sort(x, (x1, x2) => x1.Length.CompareTo(x2.Length)); 

Puoi anche farlo usando Linq come di seguito:

 var sortedElements = from arrElement in arr.Distinct() orderby arrElement.Length select arrElement; foreach (string element in sortedElements) { ... }