Сортировать строковые данные численно (ASP.NET C #) - PullRequest
3 голосов
/ 17 июля 2011

У меня есть вид сетки со столбцом, содержащим следующие строки данных:

    1
    2a
    2b
    6
    8a
    10a

Заголовок столбца имеет выражение sortExpression, поэтому я могу щелкнуть, чтобы отсортировать его

сортируйте эти данные, я получаю их в следующем порядке:

    1
    10a
    2a
    2b
    6
    8a

.. где появляется строка 10a из-за 1

Я хочу, чтобы она сортировалась численно, но мои значениястроки.Данные должны быть отсортированы по номеру, а затем по букве в конце (если там есть буква)

Как я могу сделать это для моих данных, извлекаемых из источника данных? Имейте в виду, что это в виде сетки.

Ответы [ 3 ]

3 голосов
/ 17 июля 2011

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

public static void NumericalSort(List<string> l)
{
    Regex rgx = new Regex("([^0-9]*)([0-9]+)");
    l.Sort((a, b) =>
    {
        var ma = rgx.Matches(a);
        var mb = rgx.Matches(b);
        for (int i = 0; i < ma.Count; ++i)
        {
            int ret = ma[i].Groups[1].Value.CompareTo(mb[i].Groups[1].Value);
            if (ret != 0)
                return ret;

            ret = int.Parse(ma[i].Groups[2].Value) - int.Parse(mb[i].Groups[2].Value);
            if (ret != 0)
                return ret;
        }

        return 0;
    });
}

static void Main(string[] args)
{
    List<string> l = new string[] { "1", "2a", "2b", "6", "8a", "10a" }.ToList();

    NumericalSort(l);

    foreach (var item in l)
        Console.WriteLine(item);
}
0 голосов
/ 17 июля 2011

У CodeProject есть тот, который я иногда использую.

http://www.codeproject.com/KB/recipes/csnsort.aspx

0 голосов
/ 17 июля 2011

разделите число и строку, и вы можете достичь того, что вы хотите

...