-1

数字を含むリストアイテムの文字列を並べ替えるのが困難でした。最小から最大に自動的に並べ替えられたらいいのにと思います。これが私のコードです:

// Initialize an array to store the numbers
List<string> tab_num = new List<string>();
tab_num.Add("A.3.2.1");
tab_num.Add("A.3.3.1");
tab_num.Add("A.1.0.1");
tab_num.OrderByDescending(num => num).ToList();

なぜ私の結果は間違っているのですか?...

[1] A.3.2.1

[2] A.3.3.1

[3] A.1.0.1

期待される結果:

[1] A.1.0.1

[2] A.3.2.1

[3] A.3.3.1

どうもありがとう

4

5 に答える 5

7

OrderByDescendingは、大きいものから小さいものへの意味です。また、並べ替え後に結果を割り当てていません。

これを試して:

        List<string> tab_num = new List<string>();
        tab_num.Add("A.3.2.1");
        tab_num.Add("A.3.3.1");
        tab_num.Add("A.1.0.1");
        tab_num = tab_num.OrderBy(num => num).ToList();
于 2012-12-18T10:32:29.793 に答える
4

アルファベット順に並べ替えているからです。OrderBy「最小から最大」を注文したい場合は、とにかく使用する必要があります。ある程度数値またはバージョンに解析する必要があります。

Version v = null;
var ordered = tab_num.Select(tab => new { tab, Versionpart = tab.Substring(2) })
                     .Where(x => Version.TryParse(x.Versionpart, out v))
                     .OrderBy(x => v)
                     .Select(x => x.tab)
                     .ToList();

(バージョンが常にで見つかると仮定しますtab.Substring(2)

于 2012-12-18T10:34:37.470 に答える
2

実際、ここではlinqは必要ありません。次のSort方法を使用してください。

tab_num.Sort();

ただし、コードを機能させたい場合は、結果のリストをソースリストに割り当てるだけです。

tab_num = tab_num.OrderBy(x => x).ToList();
于 2012-12-18T10:41:44.407 に答える
2

linqクエリの結果を任意の変数に設定する必要があります(そしてOrderByを使用します)。

List<string> tab_num = new List<string>();
tab_num.Add("A.3.2.1");
tab_num.Add("A.3.3.1");
tab_num.Add("A.1.0.1");
tab_num = tab_num.OrderBy(num => num).ToList();

tab_num.OrderBy(num => num).ToList()ソースリストでソートを実行しませんが、ソートされたリストを返します。

于 2012-12-18T10:36:59.170 に答える
1

ここでの主な問題は、以下に示すように結果をリストに割り当てていないことです。

ところで:このリストには数字は含まれていません。文字列が含まれているため、コンパレータはアルファベットのコンパレータを使用します。使用しOrderByないでOrderByDescendingください。文字列は非常に単純であり、数値が9を超えるとデフォルトのコンパレータが誤った応答を返すため、独自のコンパレータを実装することをお勧めします。

于 2012-12-18T10:28:08.883 に答える