C # Regex сортировка букв и чисел - PullRequest
1 голос
/ 25 марта 2009

У меня есть список, который нужно заказать, скажем:

R1-1
R1-11
R2-2
R1-2

это нужно заказать:

R1-1
R1-2
R1-11
R2-2

В настоящее время я использую метод C # Regex.Replace и добавляю 0 до появления одиночных чисел в конце строки с чем-то вроде:

Regex.Replace(inString,@"([1-9]$)", @"0$2")

Я уверен, что есть лучший способ сделать это, которого я просто не могу понять. У кого-нибудь есть хороший способ сортировки букв и чисел с помощью регулярных выражений?


Я использовал приведенный ниже метод Грега, чтобы завершить это, и просто подумал, что должен добавить код, который я использую для полноты:

public static List<Rack> GetRacks(Guid aisleGUID)
    {
        log.Debug("Getting Racks with aisleId " + aisleGUID);
        List<Rack> result = dataContext.Racks.Where(
                               r => r.aisleGUID == aisleGUID).ToList();
        return result.OrderBy(r => r.rackName, new NaturalStringComparer()).ToList();
    }

Ответы [ 2 ]

4 голосов
/ 25 марта 2009

Я думаю, что вам нужен естественный порядок сортировки, как в Windows Explorer? Если так, то я написал в блоге некоторое время назад, показывая , как вы можете достичь этого в нескольких строках C # .

Примечание: я только что проверил, и использование NaturalStringComparer в связанной записи возвращает порядок, который вы ищете с примерами строк.

2 голосов
/ 25 марта 2009

Вы можете написать свой собственный компаратор и использовать регулярные выражения, чтобы сравнить число между «R» и «-» первым, а затем число после «-», если первые числа равны.

Эскиз:

public int Compare(string x, string y)
{
    int releaseX = ...;
    int releaseY = ...;
    int revisionX = ...;
    int revisionY = ...;

    if (releaseX == releaseY)
    {
        return revisionX - revisionY;
    }
    else
    {
        return releaseX - releaseY;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...