如何在保留數字值的同時按字母順序對字串進行排序
當某些字串包含數字字元時,按字串包含數字字元時,按字串字母順序對字串進行排序可能會遇到挑戰。如果禁止數位轉換,則需要採用替代方法來有效處理這些情況。
一種解決方案是利用區分數字和非數字值的自訂比較器。這個比較器可以傳遞給 OrderBy 方法來自訂排序標準。
這是使用 Enumerable.OrderBy 方法和 SemiNumericComparer 類別的範例實作:
using System; using System.Collections.Generic; class Program { static void Main() { string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" }; foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer())) { Console.WriteLine(thing); } } public class SemiNumericComparer: IComparer<string> { /// <summary> /// Determine if a string is a number /// </summary> /// <param name="value">String to test</param> /// <returns>True if numeric</returns> public static bool IsNumeric(string value) { return int.TryParse(value, out _); } /// <inheritdoc /> public int Compare(string s1, string s2) { // Flags to indicate if strings are numeric var IsNumeric1 = IsNumeric(s1); var IsNumeric2 = IsNumeric(s2); // Handle numeric comparisons if (IsNumeric1 && IsNumeric2) { var i1 = Convert.ToInt32(s1); var i2 = Convert.ToInt32(s2); // Order by numerical value if (i1 > i2) { return 1; } if (i1 < i2) { return -1; } return 0; } // Handle cases where only one string is numeric if (IsNumeric1) { return -1; } if (IsNumeric2) { return 1; } // Default to alphabetical comparison return string.Compare(s1, s2, true, CultureInfo.InvariantCulture); } } }
此程式碼將輸出字串按以下排序順序:
007 90 bob lauren paul 101
以上是如何在保留數字順序的同時按字母順序排列嵌入數字的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!