Это не вопрос; Я просто хочу сообщить свое решение о проблеме, которую не смог найти на net. Проблема в том, что я хочу отсортировать строку, где буквы v, w, å, ä, ö перепутаны и где числа указаны как числа, а не как символы. т.е. «2 кошки» предшествует «10 собак». Да, я выбрал функцию NaturalSort и изменил ее так, чтобы "W" заменялось на "vööö" временно. Эта проблема не появляется, если ваш CultureInfo установлен на Engli sh. Но тогда "å", "ä" "ö" не сортируются последними (после "z")
Мой код "sheep" выглядит следующим образом: (любые комментарии или улучшения приветствуются)
public static IEnumerable<string> NaturalSort(IEnumerable<string> list)
{
list = list.Select(s => s.Replace("W", "Vööö")).Select(s => s.Replace("w", "vööö")); // New line
int maxLen = list.Select(s => s.Length).Max();
Func<string, char> PaddingChar = s => char.IsDigit(s[0]) ? ' ' : char.MaxValue;
return list
.Select(s =>
new
{
OrgStr = s,
SortStr = Regex.Replace(s, @"(\d+)|(\D+)", m => m.Value.PadLeft(maxLen, PaddingChar(m.Value)))
})
.OrderBy(x => x.SortStr)
.Select(x => x.OrgStr).Select(s => s.Replace("Vööö", "W")).Select(s => s.Replace("vööö", "w")); // Extended line
}