Swift 2: Call может бросить, но он не помечен как «try» и ошибка не обрабатывается

Попробуйте написать небольшой вспомогательный класс для разбора и представления ваших токенов. Например, без слишком большого количества проверок:

public class NameAndNumber
{
    public NameAndNumber(string s)
    {
        OriginalString = s;
        Match match = Regex.Match(s,@"^(.*?)(\d*)$");
        Name = match.Groups[1].Value;
        int number;
        int.TryParse(match.Groups[2].Value, out number);
        Number = number; //will get default value when blank
    }

    public string OriginalString { get; private set; }
    public string Name { get; private set; }
    public int Number { get; private set; }
}

Теперь становится проще записывать компаратор или сортировать его вручную:

var list = new List<string> { "ABC", "1", "5", "NUM44", "3", 
                              "6", "11", "9", "NUM1", "NUM0" };

var sorted = list.Select(str => new NameAndNumber(str))
    .OrderBy(n => n.Name)
    .ThenBy(n => n.Number);

Дает результат:

1, 3, 5, 6, 9, 11, ABC, NUM0, NUM1, NUM44

147
задан Farhad 9 June 2015 в 16:03
поделиться