LINQ 中的字母數字排序
在LINQ 中,OrderBy 方法遵循字典順序規則,該規則按順序考慮字母和數字字符。但是,當以數值結尾的字串進行排序時,這種排序可能不會產生所需的結果。
考慮以下範例:
string[] partNumbers = { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" }; var result = partNumbers.OrderBy(x => x);
實際結果,依照字典順序,將是:
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
但是,預期結果是將相似的字母順序分組在一起,無論數字如何後綴。為此,我們需要修改排序標準。
按字母數字排序的關鍵是比較填充的數字部分。透過向數值填充零,我們確保 LINQ 可以正確區分它們。我們可以這樣做:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
此函數將零填充到輸入字串中的任何數字。透過使用此函數作為LINQ 中的排序標準,我們得到了預期的結果:
var result = partNumbers.OrderBy(x => PadNumbers(x));
結果清單現在將排序為:
AB1 AB2 AB11 ...
此方法假設最大數字部分的位數是已知的。對於更複雜的情況,請考慮實作自訂 IComparer,它允許對比較標準進行更細粒度的控制。
以上是如何在 LINQ 中使用數字後綴實現字母數字排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!