Как отсортировать число в алфавитно-цифровом

Вход:

SHC 111U, SHB 22x, SHA 5555G

Необходимый вывод:

SHB 22X, SHC 111U, SHA 5555G

Я должен отсортировать только Vehicle no на Стоянке не буква префикса и буква суффикса

6
задан Default 9 April 2013 в 10:39
поделиться

5 ответов

Фантастическое, хорошо оптимизированное решение с открытым исходным кодом на http://dotnetperls.com/alphanumeric-sorting

5
ответ дан 10 December 2019 в 00:36
поделиться

] Используйте метод Sort, который принимает объект IComparer , и передайте ему вашу коллекцию номеров транспортных средств. Вам нужно будет определить собственный класс, реализующий IComparer. В методе Compare этого класса вы можете написать код для сравнения двух номеров транспортных средств. Вероятно, вам следует использовать регулярное выражение для извлечения числовой части номера транспортного средства.

0
ответ дан 10 December 2019 в 00:36
поделиться

Хороший способ для этого нужно было бы сделать что-то вроде этого

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

0
ответ дан 10 December 2019 в 00:36
поделиться

Для этого нет ничего встроенного, но вы можете сделать это, сначала извлекая числа и выполняя сортировку на их основе. Например:

class VehicleNumberComparer : IComparer<string>
{
    public int Compare(string lhs, string rhs)
    {
        var numExtract = new Regex("[0-9]+");
        int lhsNumber = int.Parse(numExtract.Match(lhs).Value);
        int rhsNumber = int.Parse(numExtract.Match(rhs).Value);
        return lhsNumber.CompareTo(rhsNumber);
    }
}

Это не проверено (и, вероятно, даже не будет компилироваться без модификации), в нем нет проверки ошибок и, вероятно, это не самый быстрый метод в мире, но он должен дать вам представление.

4
ответ дан 10 December 2019 в 00:36
поделиться

Если возможно иметь табличку без номера, проверьте ее.

static int SortPlate(string plate)
{
    int plateNumber;
    Regex regex = new Regex(@"\d+");
    Int32.TryParse(regex.Match(plate).Value, out plateNumber);

    return plateNumber;
}

static void Main(string[] args)
{
    IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G", "HOT STUFF"};

    var sortedList = from z in data
                     orderby SortPlate(z)
                     select z;

    foreach (string plate in sortedList)
    {
        Console.WriteLine(plate);
    }

}

Если это абсолютно невозможно и конец света наступит раньше, чем когда-либо появится табличка без номеров, тогда эта сокращенная форма будет работать:

static void Main(string[] args)
{
    IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G"};

    Regex regex = new Regex(@"\d+");
    var sortedList = from z in data
                     orderby Int32.Parse(regex.Match(z).Value)
                     select z;

    foreach (string plate in sortedList)
    {
        Console.WriteLine(plate);
    }

}
1
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: