Вам нужно как-то извлечь временные части, а затем сравнить их друг с другом.
Вы можете, например, сделать это, используя Comparison<string>
. Вот пример, в котором для этого используется тип Span<T>
без выделения дополнительного мусора:
List<string> list = new List<string>() { ... }
list.Sort((a, b) =>
{
//compare AM/PM
int compareAmAndPm = a.AsSpan().Slice(a.Length - 6, 2)
.CompareTo(b.AsSpan().Slice(b.Length - 6, 2), StringComparison.Ordinal);
if (compareAmAndPm != 0)
return compareAmAndPm;
//compare the times as integers
int index = a.LastIndexOf('\\');
var firstTime = int.Parse(a.AsSpan().Slice(index + 1, a.Length - index - 7));
index = b.LastIndexOf('\\');
var secondTime = int.Parse(b.AsSpan().Slice(index + 1, b.Length - index - 7));
return firstTime.CompareTo(secondTime);
});
Это должно дать вам следующий результат:
C: \ myfiles \ 1000AM.csv
C: \ myfiles \ 1100AM.csv
C: \ myfiles \ 100PM.csv
C: \ myfiles \ 200PM.csv
C: \ myfiles \ 1200PM.csv