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

10

有一个字符串数组,我该如何对其进行更新,使得其中的元素按照长度排序。

我曾经尝试过

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

所以,我会得到a,aa,ss,abc,但它显示:

  

无法隐式转换类型'system.linq.iorderedenumerable to string[]'

所以,我正在做的是

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

还有其他的方法吗?

3个回答

30

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

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

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


2
这是我找到的唯一方法,可以按数组长度排序,而不使用Linq,也不创建另一个数组(或任何其他集合)。 - ePandit

14

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

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

然而,它不会对源数组进行排序。相反,它将创建一个已排序的新数组并替换引用。如果需要原地排序(例如当数组还被其他地方引用时),请使用Array.Sort方法:

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

1
你也可以使用下面的Linq进行操作:
var sortedElements = from arrElement in arr.Distinct()
                     orderby arrElement.Length
                     select arrElement;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接