2

「青」、「緑」、「赤」などの文字列の配列があり、最も長い文字列が最初に、最も短い文字列が最後になるように並べ替えたいと思います。

現在、同じインデックス位置にある配列内の各文字列の長さで別の配列を作成し、以下に示すように、この配列を並べ替えのキー配列として使用していますが、これはおそらく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)

編集:サンプルコードで色をリストとして定義したことに気づきました。これは実際のコードでは配列です。

4

4 に答える 4

4

別の Linq ソリューション (警告、C# から変換)

Dim Sorted = From p In colours Order By p.Length Descending Select p
于 2012-04-04T15:45:45.523 に答える
3

私の意見では、これがショートウェイです。リンクを使用します。

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

乾杯。

于 2012-04-04T15:41:35.977 に答える
2
Dim colours = {"blue", "green", "red"}
Dim coloursSortedByLength = colours.OrderByDescending(Function(c) c.Length)

出力順序は、緑、青、赤です。

于 2012-04-04T15:43:00.833 に答える
1

これを行う最も簡単な方法は、すべての文字列をリスト内の他のすべての文字列と比較することです。

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;
        }
    }
}
于 2012-04-04T15:49:04.570 に答える