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?
To sort the array by its string length, we can use the Array. sort() method by passing compare function as an argument. If the compare function return value is a. length - b.
To sort a String array in Java, you need to compare each element of the array to all the remaining elements, if the result is greater than 0, swap them.
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.
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));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With