11

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?

3 Answers 3

31

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.

Sign up to request clarification or add additional context in comments.

1 Comment

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

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));

Comments

1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.