使用LINQ 進行字母數字排序
處理包含數值的字串時,LINQ 中的預設字母排序可能無法產生所需的字母排序結果。考慮以下範例:
string[] partNumbers = new string[] { "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" }; var result = partNumbers.OrderBy(x => x);
預期結果將對字串進行如下排序:
AB1 AB2 AB11 ...
但是,實際結果有所不同,因為預設字串排序遵循字典順序。這意味著數值從左到右進行比較,從而導致以下排序:
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
為了實現所需的字母數字排序,我們需要修改比較邏輯。我們可以用特定數量的零填充每個字串的數字部分。這確保了數字值的比較是公平的,無論其長度如何。
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); } var result = partNumbers.OrderBy(x => PadNumbers(x));
使用此修改後的排序,字串的數字部分根據其填充值進行比較,從而產生以下正確的排序:
AB1 AB2 AB11 ...
請注意,此方法假設輸入中的數字有最大位數。如果數字的位數多於指定的填充,則排序可能不準確。
以上是LINQ 如何實現包含數字的字串的正確字母數字排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!