Sort string array by element length

前端 未结 3 503
既然无缘
既然无缘 2020-12-16 03:07

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\"};
a         


        
相关标签:
3条回答
  • 2020-12-16 03:30

    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));
    
    0 讨论(0)
  • 2020-12-16 03:38

    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.

    0 讨论(0)
  • 2020-12-16 03:42

    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)
    {
         ...
    }
    
    0 讨论(0)
提交回复
热议问题