按元素长度排序字符串数组

时间:2013-11-20 04:21:09

标签: c# .net arrays string sorting

拥有一个字符串数组,如何更新它,使其元素按其长度排序。

我在尝试

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

所以,我会得到a,aa,ss,abc,但它会说

  

无法隐式转换类型'system.linq.iorderedenumerable   字符串[]'

所以,我在做

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

还有其他办法吗?

3 个答案:

答案 0 :(得分:18)

由于arr是一个数组,您可以使用方便的Array.Sort方法:

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

这比OrderBy更有效,因为它会对数组的元素进行排序,而不是创建要枚举的新集合。

答案 1 :(得分:9)

OrderBy返回IEnumerable,而不是数组。使用ToArray方法获取数组:

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

但是,它不会对源数组进行排序。而不是那样,它将创建一个新的项目,并对项目进行排序并替换引用。如果您需要就地排序(例如,当阵列也在别处引用时),请使用Array.Sort方法:

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

答案 2 :(得分:1)

您也可以使用Linq执行此操作,如下所示:

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

foreach (string element in sortedElements)
{
     ...
}