对字符串数据进行数字排序 (ASP.NET C#)

发布于 2024-11-24 18:22:06 字数 385 浏览 1 评论 0原文

我有一个 gridview,其列包含以下数据行:

    1
    2a
    2b
    6
    8a
    10a

列的标题有一个 sortExpression,因此我可以单击对其进行排序

如果我对这些数据进行排序,我将按以下顺序获取它:

    1
    10a
    2a
    2b
    6
    8a

..其中 10a 行出现是因为 1

我希望它按数字排序,但我的值是字符串。 数据需要按数字排序,然后按末尾的字母排序(如果有字母),

如何对从数据源拉回的数据执行此操作? 请记住,这是在网格视图中。

I've got a gridview with column containing the following rows of data:

    1
    2a
    2b
    6
    8a
    10a

The header of the column has a sortExpression so I can click to sort it

If I do sort this data, I get it in this order:

    1
    10a
    2a
    2b
    6
    8a

..where the 10a row comes up because of the 1

I want it to sort numerically, but my values are strings.
The data needs to sort by number and then by the letter at the end (if a letter is there)

How can I do this for my data the being pulled back from a datasource?
Keep in mind that this is in a gridview.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陪我终i 2024-12-01 18:22:06

如果您有字符串列表,则可以使用自定义比较对它们进行排序。这是它的一些代码:

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

If you have a list of strings then you can sort them using a custom comparison. Here is some code for it:

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);
}
小清晰的声音 2024-12-01 18:22:06

把数字和字符串分开就可以达到你想要的效果

split the number and string and you can achieve what you want

遇见了你 2024-12-01 18:22:06

CodeProject 有一个我偶尔使用的工具。

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

CodeProject has one that I use occasionally.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文