一般的な改訂履歴シーケンスで使用されているシーケンスに関連した順序で文字列のリストをソートしようとしています。一部の顧客は「 - 」または「新規」などの特定のコードで始まり、LINQを使用してカスタムソート順を定義できます。ただし、Rev AからRev Zまで図面が改訂された後はRev AAからRev AZ、次にRev BAからBZなどになります。 LINQを使用して次のリストを並べ替えるにはどうすればよいですか?linqをカスタムソートで使用して文字列のリストを並べ替える
Iはコードの例示的なブロックとしてこれを持っている:
List<string> revList = new List<string> { "A", "NC", "New", "AB", "PD", "PD1",
"PD2", "B", "-", "*", "BB", "NA" };
revList = revList.OrderByDescending(i => i.ToLower() == "pd").
ThenByDescending(i => i.ToLower() == "nc").
ThenByDescending(i => i.ToLower() == "na").
ThenByDescending(i => i.ToLower() == "new").
ThenByDescending(i => i.ToLower() == "pd1").
ThenByDescending(i => i.ToLower() == "pd2").
ThenByDescending(i => i.ToLower() == "-").
ThenByDescending(i => i.ToLower() == "*").
ThenBy(i => i).ToList();
foreach (string rev in revList)
Console.WriteLine(rev);
これは、出力を生成する:
PD
NC
NA
NEW
PD1
PD2
-
*
A
AB
B
B
Iを生成したい:
PD
NC
NA
NEW
PD1
PD2
-
*
A
B
AB
BB
最初に「長さ」で並べ替えます。 'ThenBy(i => i)'の前に 'ThenBy(i => i.Length).'を挿入してください。 –
Ivan、勝ちます。私はそれが最初だったのであなたの答えに投票することができたらいいのに、それはコメントだった。ありがとうございました。 – AuLion
なぜ「PD」は「NC」が望ましい結果になる前に来たのですか? –