Sort string array by element length

18,783

Solution 1

Since arr is an array, you can use the convenient Array.Sort method:

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

This is more efficient than OrderBy as it will sort the elements of the array in place rather than creating a new collection to enumerate.

Solution 2

OrderBy returns IEnumerable, not an array. Use ToArray method to get an array:

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

However, it will not sort the source array. Instead of that, it will create a new one with items sorted and replace the reference. If you need in-place sort (e.g. when the array is also referenced elsewhere) use Array.Sort method:

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

Solution 3

You can also do this using Linq as below:

var sortedElements = from arrElement in arr.Distinct()
                     orderby arrElement.Length
                     select arrElement;

foreach (string element in sortedElements)
{
     ...
}
Share:
18,783
edgarmtze
Author by

edgarmtze

Updated on June 23, 2022

Comments

  • edgarmtze
    edgarmtze almost 2 years

    Having an array of strings how can I update it so its elements are sorted by its length.

    I was trying

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

    So, I would get a,aa,ss,abc, but it says

    cannot implicitly convert type 'system.linq.iorderedenumerable to string[]'

    So, I was doing

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

    Is there other way to do this?

  • ePandit
    ePandit over 8 years
    This is the only method I found, to sort array lengthwise without using Linq and also without creating another array (or any other collection).