Vb.net 如何按长度对字符串数组排序

Vb.net 如何按长度对字符串数组排序,vb.net,arrays,sorting,Vb.net,Arrays,Sorting,我有一个字符串数组,如蓝色、绿色、红色,我希望对它们进行排序,使最长的字符串排在第一位,最短的字符串排在最后 目前,我正在创建另一个数组,数组中每个字符串的长度位于相同的索引位置,并使用此数组作为关键数组进行排序,如下所示,但我认为这可以优化为一行 Dim colours() As string = {"blue", "green", "red"} Dim colourslength() As Integer For i As Integer = 0 To colours.Length - 1

我有一个字符串数组,如蓝色、绿色、红色,我希望对它们进行排序,使最长的字符串排在第一位,最短的字符串排在最后

目前,我正在创建另一个数组,数组中每个字符串的长度位于相同的索引位置,并使用此数组作为关键数组进行排序,如下所示,但我认为这可以优化为一行

Dim colours() As string = {"blue", "green", "red"}
Dim colourslength() As Integer
For i As Integer = 0 To colours.Length - 1
 colourslength(i) = colours(i).Length
Next
Array.Sort(colourslength, colours)
Array.Reverse(colours)

编辑:刚刚意识到我在示例代码中将颜色定义为一个列表,在我的实际代码中它是一个数组。

我认为这是一个简短的方法。使用linq

Dim strs = New String() {"", "333", "22", "4444", "55555", "1"}
Dim sorted = strs.OrderBy(Function(x) x.Length).ThenBy(Function(x) x).ToArray()
编辑

如果你想要一个相反的顺序,只需要去掉额外的方法调用,然后按相反的顺序进行排序

Dim strs = New String() {"", "333", "22", "4444", "55555", "1"}
Dim sorted = strs.OrderByDescending(Function(x) x.Length).ThenByDescending(Function(x) x).ToArray
干杯

Dim colours = {"blue", "green", "red"}
Dim coloursSortedByLength = colours.OrderByDescending(Function(c) c.Length)

输出顺序是:绿色、蓝色、红色。

另一个Linq解决方案警告,从C转换而来

Dim Sorted = From p In colours Order By p.Length Descending Select p

最好的简单方法是将每个字符串与列表中的所有其他字符串进行比较:

在Java中:

for(int i=0; i<list.length-1; i++){
    for(int j=i+1; j<list.length; j++){
        if(list[i].length() < list[j].length()){
            tmp = list[i];
            list[i] = list[j];
            list[j] = tmp;
        }
    }
}

OrderBy需要按降序排列,因为他想先排列最长的。你能解释一下这行的第二部分是做什么的吗?Dim sorted=strs.orderByDownering函数x x.Length.ThenByDownering函数x.to排列ThenByDownering函数x部分。我读到这行的第一部分是进行实际排序的?@MarcusLars,OrderByDescendingFunctionx x.Length按长度排序。然后,当存在长度相等的字符串时,将应用BY。两个长度相等的字符串将按字母顺序排序。@davisoa:我猜.net 4是因为内联列表初始化在早期版本中无效。它是.net 4,但我无意中使用了一个列表,对此表示抱歉。Dim q=从el开始,颜色按el.length降序排列。在VB.NET中,选择不是必需的。如果省略,选择的元素将是元素类型。