2

私はこのようなリストを持っています:

List<string> list_lines = new List<string>();
list_lines.add("name1__pass1__com__14__55");
list_lines.add("name2__pass2__com__14__5445");
list_lines.add("name3__pass3__com__14__456456");
list_lines.add("name4__pass4__com__14__1357");
list_lines.add("name5__pass5__com__14__20000");
list_lines.add("name6__pass6__com__14__25");
list_lines.add("name7__pass7__com__14__12");

もっと...

ご覧のとおり、ここに区切り記号があります->そのリストのすべての文字列に「__」。
平均 :

string[] Separator = new string[] { "__" };   

foreach(string s in list_lines)
{
    string[] line_ar = s.Split(Separator, StringSplitOptions.None);
    int Num  = int.parse(line_ar[4]);
}

そのリストの Num 部分でそのリストを並べ替えたい。
StackOverflow を使用していくつかのメソッドをテストしましたが、大きなリストのバグがありました。

それをソートするために私を助けて本当に感謝します

4

6 に答える 6

10

昇順:

list_lines = list_lines.OrderBy(s => int.Parse(s.Split(Separator, StringSplitOptions.None)[4])).ToList();

説明:

list_lines = list_lines.OrderByDescending(s => int.Parse(s.Split(Separator, StringSplitOptions.None)[4])).ToList();
于 2012-11-22T14:37:39.880 に答える
2

数字が常に最後の下線文字の後に始まる場合、これは機能するはずです。

var sortedList = list_lines
    .OrderByDescending(l => int.Parse(l.Substring(l.LastIndexOf("_") + 1)))
    .ToList();
于 2012-11-22T14:38:51.463 に答える
2
var myList = list_lines.OrderBy(x => int.Parse(x.Split(new string[] {"__"}, StringSplitOptions.None)[4])).ToList();
于 2012-11-22T14:37:23.080 に答える
1

他の答えは、あなたが望むようにソートされた新しいリストを作成します。代わりに、同じリストを並べ替えたい場合は、次のようにしてみてください。

Func<string, int> getNum = str => int.Parse(str.Split(Separator, StringSplitOptions.None)[4]);
list_lines.Sort((x, y) => getNum(x).CompareTo(getNum(y)));

これはのオーバーロードをList<>.Sort使用します。降順が必要な場合は、ラムダ本体でxandを交換します。yComparison<>

リストが非常に長い場合、これは高速で (クイック ソートを使用)、リストの新しいコピーのメモリを必要としません。

于 2012-11-22T15:04:48.610 に答える
0

次のようなLINQ関数でラムダ式を利用できますOrderBy

string[] Separator = new string[] { "__" };
var sortedList = list_lines
    .OrderBy(s => int.Parse(s.Split(Separator, StringSplitOptions.None)[4]))
    .ToList();

関係のない補足として、正しい C# 命名規則を使用して、コードが読みやすくなり、既存の C# コードベースと統合されるようにしてください。たとえば、ローカル変数名を大文字で始めず ( Separator-> separator)、より多くの単語が含まれる場合に小文字のキャメル ケース (パスカル ケース) を使用します ( list_lines-> listLines) 。

于 2012-11-22T14:42:55.073 に答える