Сортировка строки по-шведски sh способом - PullRequest
0 голосов
/ 14 апреля 2020

Это не вопрос; Я просто хочу сообщить свое решение о проблеме, которую не смог найти на 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
    }
...