使用LINQ 進行字母數字排序
使用LINQ 的預設排序機制對字母數字字串(其中每個元素以數字值結尾)進行排序可能具有挑戰性。僅依靠字母順序排序時就會出現問題,導致意外的排序輸出。
考慮以下字串陣列:
string[] partNumbers = new string[] { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" };
直接應用 LINQ 的 OrderBy 方法將產生以下排序輸出:
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
這個結果與期望的結果有偏差,因為沒有考慮最後的數值
解
為了實現預期的排序,需要在排序鍵中填入字串的數字部分。這可以使用自訂方法來完成,例如 PadNumbers,定義如下:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
此方法將輸入字串中的任何數字序列替換為其填充的等效值。透過在OrderBy 子句中使用此方法,可以有效地標準化數字部分以進行比較:
var result = partNumbers.OrderBy(x => PadNumbers(x));
此方法可確保同等對待數值,無論其長度如何,從而實現所需的字母數字排序:
AB1 AB2 AB11 ...
雖然此解決方案假定數字的最大位數,但它提供了一種使用以下方法進行字母數字排序的可靠方法LINQ。
以上是如何使用 LINQ 對帶有數字後綴的字母數字字串正確排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!