Sort
, ignore lead charsIn C# programs strings sometimes contain characters that do not matter. These characters can be ignored while sorting.
For example, consider that we can ignore the period on the start of ".NET". The string
will be sorted by the N not the period.
This program uses a string
array with some values that have leading punctuation. The value "(Z)" is by default sorted by its parenthesis character. The value ".NET" is sorted by the period.
TrimStart
on the identifier in the orderby
part of the clause. The sort key does not include leading punctuation.using System; using System.Linq; class Program { static void Main() { string[] elements = { "A", "(Z)", ".NET", "NO" }; { var sorted = from element in elements orderby element select element; foreach (var element in sorted) { Console.WriteLine(element); } } Console.WriteLine("---"); { var sorted = from element in elements orderby element.TrimStart('(', '.') select element; foreach (var element in sorted) { Console.WriteLine(element); } } } }(Z) .NET A NO --- A .NET NO (Z)
The code here is not optimally fast. If you want to optimize the performance of this method, consider implementing IComparer
and using Array.Sort
and sorting the array in-place.
We can implement custom sorts using query expressions. We can sort on mutated strings—such as ones that are stripped of leading characters. This can lead to more naturally sorted arrays.