Вопрос

Вход:

SHC 111U, SHB 22X ,, SHA 5555G

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

SHB 22X, SHC 111U, SHA 5555G

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

Это было полезно?

Решение

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

Другие советы

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

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);
    }
}

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

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

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);
    }

}

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

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

Используйте метод сортировки, который принимает Incomparer. Объект и пройти свою коллекцию номеров автомобилей. Вам нужно будет определить пользовательский класс, который реализует ICOMPARER. В сравнении этого класса вы можете написать код для сравнения двух номеров автомобилей. Возможно, вы должны использовать Regex для извлечения численной части номера автомобиля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top