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) { ... }