Разработка версии коды с данными испытаний, используя PInvoke, это стандартная буквенно-цифровая сортировка, обеспечивается Win32, который очень быстро (используйте код LINQPad)
void Main()
{
List<Test> test = Test.FetchList(); // Fetch Data
test.Sort(new AlphaNumericSorter()); // Sorting using Win32 StrCmpLogicalW
test.Dump(); // Print Result
}
// Define other methods and classes here
public class AlphaNumericSorter : IComparer<Test>
{
public int Compare(Test x, Test y)
{
return SafeNativeMethods.StrCmpLogicalW(x.Data, y.Data);
}
}
[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
public static extern int StrCmpLogicalW(string psz1, string psz2);
}
public class Test
{
public int Id { get; set;}
public string Data { get; set;}
public static List<Test> FetchList()
{
var returnList = new List<Test>();
returnList.Add(new Test { Id = 1, Data = "[email protected]%"});
returnList.Add(new Test { Id = 2, Data = "data10"});
returnList.Add(new Test { Id = 3, Data = "data"});
returnList.Add(new Test { Id = 4, Data = "@$data"});
returnList.Add(new Test { Id = 5, Data = "data2"});
return (returnList);
}
}
Пожалуйста, обратите внимание:
- Если вам нужна пользовательская/нестандартная сортировка, вам необходимо определить работу Aplha-numeric s Orting, это один использовать стандартный API
Вам нужно буквенно-цифровой сортировки не –
Возможные дубликата [буквенно-цифровой сортировки с помощью LINQ] (http://stackoverflow.com/questions/5093842/alphanumeric-sorting-using-linq) – Martheen
Существует нет «стандартный» формат по возрастанию. Вы можете использовать параметр [compareType] (https://msdn.microsoft.com/en-us/library/system.stringcomparison (v = vs.110) .aspx) для параметра [String.Compare] (https: // msdn.microsoft.com/en-us/library/e6883c06(v=vs.110).aspx), чтобы указать конкретное сравнение. –