問題:
給定一個字串數組,其中每個元素都結束使用數值時,目標是按字母數字順序對數組進行排序,並優先考慮其中的數字順序
範例:
考慮字串陣列:
partNumbers = ["ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11"]
使用LINQ 的OrderBy 方法,得到想要的排序結果是:
["AB1", "AB2", "AB11", ... ]
問題:
但是,預設排序機制將數字視為字串,導致以下輸出:
["AB1", "Ab11", "AB2", "ABC1", "ABC10", "ABC10", "ABC11", "ABC2"]
解決方案:
修正此問題問題,有必要在排序子句中填入字串的數字部分。這樣,OrderBy 就將數字視為數字,而不是字串。下面的程式碼片段示範了這個方法:
var result = partNumbers.OrderBy(x => PadNumbers(x));
PadNumbers 方法:
PadNumbers 方法實作如下:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
PadNumbers 方法實作如下:
說明:
此方法辨識並以零填充輸入字串中的所有數字序列,假設最大數字長度為 10。此填色可確保在排序過程中將數值視為數字,同時保留原始字串資料。
輸出:
["AB1", "AB2", "AB11", ... ]
使用PadNumbers方法,陣列已正確排序如下:
透過應用此填充技術,您可以使用LINQ 實現精確的字母數字排序,其中數字值在每個元素內優先排序。以上是如何使用 LINQ 的 OrderBy 方法對包含數字的字串進行正確的字母數字排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!