透過自訂比較按字母順序和數字對字串進行排序
此問題提出了在考慮數值的同時按字母順序對字串數字數組進行排序的挑戰。為此,必須實作自訂比較器來覆寫預設的字串比較。
實作詳細資訊
以下的程式碼示範如何實作此排序:
using System; using System.Collections.Generic; using System.Linq; namespace StringSort { class Program { static void Main(string[] args) { // Input array of string numbers string[] things = new string[] { "105", "101", "102", "103", "90" }; // Sort using custom comparer IEnumerable<string> sortedThings = things.OrderBy(x => x, new SemiNumericComparer()); // Print sorted array foreach (var thing in sortedThings) { Console.WriteLine(thing); } } public class SemiNumericComparer : IComparer<string> { // Check if a string is numeric public bool IsNumeric(string value) { return int.TryParse(value, out _); } // Compare two strings public int Compare(string s1, string s2) { const int S1GreaterThanS2 = 1; const int S2GreaterThanS1 = -1; // Check if both strings are numeric var IsNumeric1 = IsNumeric(s1); var IsNumeric2 = IsNumeric(s2); if (IsNumeric1 && IsNumeric2) { int i1 = Convert.ToInt32(s1); int i2 = Convert.ToInt32(s2); return i1.CompareTo(i2); } // If one string is numeric and the other is not, consider the numeric string greater if (IsNumeric1) return S2GreaterThanS1; if (IsNumeric2) return S1GreaterThanS2; // Otherwise, perform a case-insensitive alphabetical comparison return string.Compare(s1, s2, true, CultureInfo.InvariantCulture); } } } }
自訂比較器Logic
SemiNumericComparer 類別定義字串的比較邏輯。它首先使用 IsNumeric 方法檢查兩個字串是否都是數字。如果兩者都是數字,則會對它們進行數字比較。如果只有一個字串是數字,則認為該數字字串較大。對於非數字字串,它執行不區分大小寫的字母比較。
將此比較器與 Enumerable.OrderBy 一起使用時,字串數字數組將首先按數字值排序,然後按字母順序對非數字字串排序。上面範例的輸出將會是:
90 101 102 103 105
以上是如何使用 C# 中的自訂比較器按字母順序和數字對字串進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!