Sort string array by element length
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)
{
...
}
edgarmtze
Updated on June 23, 2022Comments
-
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 sayscannot 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 over 8 yearsThis is the only method I found, to sort array lengthwise without using Linq and also without creating another array (or any other collection).